NET Framework 提供了一系列同步基元来控制线程交互并避免争用条件。这可大致分为三个类别:锁定、通知和联锁操作。

上述类别的定义并非是绝对的:有些同步机制具有多个类别的特征;一次释放一个线程的事件的功能类似于锁定;任何锁定的释放都可看作一个信号;而联锁操作可用于构造锁定。但是,这些类别仍然是有用的。

记住线程同步是协作这一点非常重要。只要有一个线程避开同步机制直接访问受保护的资源,该同步机制就不是有效的。

Monitor 类提供了附加功能,可结合 lock 语句使用:

  • TryEnter 方法允许当前被阻止,正在等待资源的线程在指定时间间隔之后放弃。它返回一个指示成功或失败的布尔值,可用于检测和避免潜在的死锁。

  • Wait 方法由临界区中的线程调用。它放弃对资源的控制并阻止,直到该资源重新可用为止。

  • PulseAll 方法允许要释放锁或调用 Wait 的线程将一个或多个线程放入就绪队列,以使它们能够获取锁。

Wait 方法重载的超时允许等待线程进入就绪队列。

如果用于锁的对象派生自 监视器

Mutex 类

线程通过调用其 Mutex

相关文章: