监视器和其他同步原语之间有什么区别

时间:2015-11-11 08:38:10

标签: windows multithreading winapi mutex critical-section

监视器和其他同步原语(如互斥锁,WinAPI事件和关键部分)之间的实际区别是什么?它在我看来它是完全相同的 - 当时一个线程可以锁定监视器,而其他线程应该等待它变得自由,就像事件和关键部分的情况一样。

那么,有什么区别?我哪里错了?

1 个答案:

答案 0 :(得分:0)

Windows下的所有这些同步原语具有类似的操作(waitsignal),但这些操作的行为略有不同。如此原始'用法通常不同。

  1. 关键部分所有者主题,因此只能由所有者发布(signal ed)
  2. 此外,与其他原语不同,关键部分的操作使用指针而不是 HANDLE ,因此WaitForMultipleObjects <不能使用关键部分/ em>和类似的功能。

    1. Mutexes 与关键部分非常相似,但它们由 HANDLE 标识,因此可以与其他对象一起等待(使用WaitForMultipleObjects )。
    2. SignalObjectAndWait函数也可用于互斥锁。

      1. 事件支持手动重置模式,当成功等待事件时,不会重置事件。因此,一些服务员可以同时绕过等待单一事件。

      2. 信号量监视器的WinAPI变体)允许使用限制大于1,即受信号量保护的代码段不再是独占的,例如关键部分互斥

      3. 此外,信号量没有所有者语义,因此任何线程都可以发出信号。此功能对于某些算法至关重要。