温馨提示×

c# autoresetevent如何与其他同步机制结合

c#
小樊
84
2024-11-18 09:45:01
栏目: 编程语言

在C#中,AutoResetEvent 是一种同步原语,用于在多个线程之间协调操作。它可以与其他同步机制结合使用,例如 MonitorMutexSemaphoreSlim。下面是一些示例,展示了如何将 AutoResetEvent 与其他同步机制结合使用。

  1. 结合 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(); // 等待任务完成
}
  1. 结合 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(); // 等待任务完成
}
  1. 结合 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 与其他同步机制结合使用。你可以根据具体需求选择合适的同步机制。

0