ManualResetEvent的Reset和Set方法如下:
Reset方法将事件设置为没有信号状态,相当于发出信号时复位信号。
Set方法将事件设置为有信号状态,相当于发出信号。
下面是一个使用ManualResetEvent的具体线程示例:
class Program
{
static void Main(string[] args)
{
static ManualResetEvent evt = new ManualResetEvent(false);
// 启动生产线程
Thread producerThread = new Thread(Producer);
producerThread.Start();
// 启动消费线程
Thread consumerThread = new Thread(Consumer);
consumerThread.Start();
producerThread.Join();
consumerThread.Join();
}
static void Producer()
{
Console.WriteLine("Producer: Start Production");
// 模拟生产任务
Thread.Sleep(3000);
// 生产完毕,发出信号
evt.Set();
Console.WriteLine("Producer: Production Finished");
}
static void Consumer()
{
Console.WriteLine("Consumer: Waiting for signal");
// 等待信号
evt.WaitOne();
Console.WriteLine("Consumer: Received signal");
// 模拟消费任务
Thread.Sleep(1000);
Console.WriteLine("Consumer: Consumption Finished");
// 复位信号,供下次循环使用
evt.Reset();
}
}
在这个示例中:
这个示例演示了ManualResetEvent的Set和Reset方法在线程间通信的示例用法。Set发送信号,Reset复位信号,实现生产者-消费者模式中的生产-消费-复位信号循环。