.NET 提供了一系列可用于同步对共享资源协调线程交互的访问的类型。多个 .NET 同步基元派生自 System.Threading.WaitHandle 类,该类会封装本机操作系统同步句柄将信号机制用于线程交互

  1. 如果没有任何线程拥有它,则 mutex 将处于已发出信号状态。
  2. 当信号量计数大于零时,会将信号量的状态设置为已发出信号;当信号量计数为零时,会将信号量的状态设置为未发出信号。
  3. System.Threading.EventWaitHandle,表示线程同步事件,可以处于已发出信号状态或未发出信号状态。
  4. EventWaitHandle,当发出信号时,会在发布单个等待线程后自动重置为未发出信号状态。
  5. Reset 方法。

跨应用程序域边界同步线程的活动。

可用于进程间同步

  1. Mutex(.NET Framework 和 .NET Core)
  2. Semaphore(.NET Framework 和 Windows 上的 .NET Core)
  3. EventWaitHandle(.NET Framework 和 Windows 上的 .NET Core)。

将这些类型用于一个应用程序中的线程同步。

  1. Semaphore 的轻量替代项。

同步作用

同步对共享资源的访问

Monitor 类

Monitor.PulseAll 方法来协调用于获取同一对象上的 lock 的线程的交互。

Mutex 类

Mutex.ReleaseMutex 方法来释放它。

Mutex.OpenExisting 方法来打开现有的命名系统 mutex。

SpinLock 结构

Monitor),基于 lock 的可用性授予对共享资源的独占访问权限。

ReaderWriterLockSlim 类

System.Threading.ReaderWriterLockSlim 类授予对共享资源的独占访问权限以便进行写入,并允许多个线程同时访问资源以便进行读取。

Semaphore 和 SemaphoreSlim 类

由于信号量没有线程关联,因此一个线程可以获取信号量,而另一个线程可以释放它。

SemaphoreSlim 不支持已命名系统信号量。

线程交互

  线程交互(或线程信号)表示线程必须等待来自一个或多个线程的通知或信号才能继续。

EventWaitHandle、AutoResetEvent、ManualResetEvent 和 ManualResetEventSlim 类

System.Threading.EventWaitHandle 类表示一个线程同步事件。

EventWaitHandle 实例。

Interlocked 类

交换、取决于比较的条件交换以及读取 64 位整数值的操作。

SpinWait 结构

System.Threading.SpinWait 结构为基于自旋的等待提供支持。

CountdownEvent 类

CountdownEvent.Signal 会递减事件的计数。

CountdownEvent 通过来自多个线程的信号取消阻止一个或多个线程。

Barrier 类

当所有参与线程到达屏障时,它们将继续前进,屏障将进行重置,使之再次可用。

Barrier。

 

相关文章:

  • 2019-07-18
  • 2021-12-27
  • 2022-12-23
  • 2021-11-18
  • 2022-12-23
  • 2021-08-13
  • 2021-08-26
  • 2021-05-28
猜你喜欢
  • 2021-11-22
  • 2021-04-20
  • 2021-05-27
  • 2022-12-23
  • 2021-04-27
  • 2022-12-23
  • 2021-04-11
相关资源
相似解决方案