在C#中,信号是用于线程间同步的工具,允许线程通过信号进行等待和通知,以控制并发执行。以下是几种常见的信号工具及其用法:
1. ManualResetEvent
和 AutoResetEvent
这两个类都是基于信号量的同步原语。它们都允许线程等待某个信号并决定何时继续执行,区别在于事件被触发后的重置行为:
ManualResetEvent
:在调用Set()
方法后保持信号状态(有信号),除非手动调用Reset()
方法清除信号。AutoResetEvent
:调用Set()
后自动重置为无信号状态,只释放一个等待的线程。
示例:使用ManualResetEvent
using System;
using System.Threading;class Program
{static ManualResetEvent manualEvent = new ManualResetEvent(false); // 初始化为无信号static void Main(string[] args){Thread t = new Thread(Work);t.Start();Console.WriteLine("主线程等待一秒钟,然后发出信号...");Thread.Sleep(1000);// 主线程发出信号