AutoResetEvent
是 .NET 中的一个同步原语,用于在线程间进行信号通知。它允许一个线程发出信号,然后等待其他线程响应该信号。一旦有一个线程响应了信号,AutoResetEvent
将自动将信号重置为非信号状态,等待其他线程再次发出信号。
以下是 AutoResetEvent
的基本用法:
using System;
using System.Threading;
class Program
{
static AutoResetEvent autoEvent = new AutoResetEvent(false);
static void Main()
{
// 启动两个线程
Thread t1 = new Thread(ThreadMethod);
Thread t2 = new Thread(ThreadMethod);
t1.Start();
t2.Start();
// 等待一段时间
Thread.Sleep(2000);
// 发出信号通知等待中的一个线程
Console.WriteLine("发出信号");
autoEvent.Set();
// 等待线程结束
t1.Join();
t2.Join();
}
static void ThreadMethod()
{
Console.WriteLine("线程启动,等待信号");
// 等待信号
autoEvent.WaitOne();
Console.WriteLine("线程收到信号,执行任务");
}
}
上述代码中,AutoResetEvent
被用于在线程之间传递信号。WaitOne()
方法用于等待信号,而 Set()
方法用于发出信号。注意,一旦 AutoResetEvent
被设置(Set()
被调用),它会自动将信号重置为非信号状态,等待下一个 WaitOne()
调用。
AutoResetEvent
通常用于生产者-消费者模型,其中一个线程(生产者)生成数据并发出信号,而其他线程(消费者)在等待信号的状态下执行任务。