c#AutoReSetEvent
时间: 2024-10-25 16:07:26 浏览: 7
在 C# 中,`AutoResetEvent` 是一个用于线程间通信的对象,特别是用于同步多个线程。它有两种状态:未发出(set)和已发出(reset)。当处于未发出状态时,等待线程会被阻塞;一旦发出后,它会被自动重置回未发出状态,除非手动再次设置。
`AutoResetEvent` 的主要特点包括:
1. **自动重置**:线程执行完毕或者调用 Reset() 方法后,事件会自动恢复到未发出状态,等待的线程需要重新请求才能获取事件。
2. **一次锁定**:如果有一个线程获得了事件,那么其他线程必须等待该线程释放事件后才能获得。
3. **同步作用有限**:适用于简单的同步操作,不适合复杂的并发场景,因为它是基于线程间的轮询机制。
在 C# 中创建和使用的例子如下:
```csharp
using System.Threading;
public class Example
{
private AutoResetEvent resetEvent = new AutoResetEvent(initialState: false); // 初始化为未发出
public void StartWorker()
{
// 线程A
Console.WriteLine("Worker A starts...");
DoWork();
resetEvent.Set(); // 工作完成,设置事件
Console.WriteLine("Worker A ends");
}
public void WorkerB()
{
// 线程B
Console.WriteLine("Worker B waits...");
resetEvent.WaitOne(); // 等待事件,然后开始工作
Console.WriteLine("Worker B begins work");
DoAnotherJob();
resetEvent.Reset(); // 工作结束后重置事件
Console.WriteLine("Worker B ends");
}
private void DoWork()
{
// 这里模拟耗时操作...
}
private void DoAnotherJob()
{
// 另一项工作...
}
}
```
阅读全文