监视器和其他同步原语(如互斥锁,WinAPI事件和关键部分)之间的实际区别是什么?它在我看来它是完全相同的 - 当时一个线程可以锁定监视器,而其他线程应该等待它变得自由,就像事件和关键部分的情况一样。
那么,有什么区别?我哪里错了?
答案 0 :(得分:0)
Windows下的所有这些同步原语具有类似的操作(wait
和signal
),但这些操作的行为略有不同。如此原始'用法通常不同。
signal
ed)。此外,与其他原语不同,关键部分的操作使用指针而不是 HANDLE ,因此WaitForMultipleObjects
<不能使用关键部分/ em>和类似的功能。
WaitForMultipleObjects
)。SignalObjectAndWait函数也可用于互斥锁。
事件支持手动重置模式,当成功等待事件时,不会重置事件。因此,一些服务员可以同时绕过等待单一事件。
信号量(监视器的WinAPI变体)允许使用限制大于1,即受信号量保护的代码段不再是独占的,例如关键部分和互斥。
此外,信号量没有所有者语义,因此任何线程都可以发出信号。此功能对于某些算法至关重要。