在C#中,AutoResetEvent
是一种同步原语,用于在多个线程之间协调操作。它可以与其他同步机制结合使用,例如 Monitor
、Mutex
和 SemaphoreSlim
。下面是一些示例,展示了如何将 AutoResetEvent
与其他同步机制结合使用。
- 结合
Monitor
使用:
private readonly object _lockObject = new object(); private readonly AutoResetEvent _autoResetEvent = new AutoResetEvent(false); public void DoWork() { Monitor.Enter(_lockObject); try { // 执行任务 } finally { _autoResetEvent.Set(); // 通知等待的线程 Monitor.Exit(_lockObject); } } public void WaitForWork() { _autoResetEvent.WaitOne(); // 等待任务完成 }
- 结合
Mutex
使用:
private readonly Mutex _mutex = new Mutex(false, "Global\\MyMutex"); private readonly AutoResetEvent _autoResetEvent = new AutoResetEvent(false); public void DoWork() { _mutex.WaitOne(); // 等待互斥锁 try { // 执行任务 } finally { _autoResetEvent.Set(); // 通知等待的线程 _mutex.ReleaseMutex(); // 释放互斥锁 } } public void WaitForWork() { _autoResetEvent.WaitOne(); // 等待任务完成 }
- 结合
SemaphoreSlim
使用:
private readonly SemaphoreSlim _semaphore = new SemaphoreSlim(0, 1); private readonly AutoResetEvent _autoResetEvent = new AutoResetEvent(false); public void DoWork() { _semaphore.Wait(); // 等待信号量 try { // 执行任务 } finally { _autoResetEvent.Set(); // 通知等待的线程 _semaphore.Release(); // 释放信号量 } } public void WaitForWork() { _autoResetEvent.WaitOne(); // 等待任务完成 }
这些示例展示了如何将 AutoResetEvent
与其他同步机制结合使用。你可以根据具体需求选择合适的同步机制。