2

根据我对互斥锁的了解——它们通常提供对共享资源的锁定功能。因此,如果一个新线程想要访问这个锁定的共享资源——它要么退出,要么必须不断地轮询锁(并浪费处理器周期等待锁)。

然而,监视器有条件变量,它为等待线程提供了一种更加异步的方式——通过将它们放在等待队列中,从而不使它们消耗处理器周期。

这是监视器相对于互斥锁(或任何没有条件变量的通用锁定机制)的唯一优势吗?

4

2 回答 2

5

互斥锁是低级构造。它们只是提供互斥和内存可见性/排序。另一方面,监视器是更高级别的——它们允许线程等待应用程序特定的条件保持。

因此,在某些情况下,监视器对简单的锁定/解锁来说只是过度杀伤力,但在大多数情况下,仅使用互斥锁是不够的——所以你会看到它们与一个或多个条件变量一起使用——从概念上讲,使用等效的监视器。

于 2011-10-26T16:20:04.137 回答
1

我认为,监视器锁定了一个对象(多线程无法同时访问该对象。)而互斥锁锁定了一个进程(多线程只有一个可以通过该进程。)

于 2013-04-28T07:18:39.820 回答