2011-10-06 143 views
2

从我所了解的互斥锁 - 它们通常提供对共享资源的锁定功能。因此,如果一个新线程想要访问这个锁定的共享资源 - 它要么退出,要么不断轮询锁(并在等待锁时浪费处理器周期)。互斥锁与监视器 - 比较

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

这是监视器比互斥锁(或没有条件变量的任何常规锁定机制)的唯一好处吗?

+0

这是准确?据我所知,目前所有的操作系​​统都把互斥操作放到了一个等待队列中。他们不是投票。 –

+0

@ZanLynx:如果没有,我不会看到使用监视器优于互斥锁。 – Hari

回答

5

互斥锁是低层构造。它们只是提供互斥和内存可视性/排序。另一方面,监视器的级别更高 - 它们允许线程等待应用程序特定的条件。因此,在某些情况下,监视器只是简单地锁定/解锁,但在大多数情况下,单独使用单独的远远不够 - 因此您可以看到它们与一个或多个条件变量一起使用 - 概念上使用等效显示器。

1

我认为,当一个互斥锁的过程的监控锁定的对象(多线程不能同时访问该对象。) (多线程只能有一个经过的过程。)