Multithreading 互斥锁与监视器-比较

Multithreading 互斥锁与监视器-比较,multithreading,mutex,monitors,Multithreading,Mutex,Monitors,根据我对互斥体的了解,它们通常在共享资源上提供锁定功能。因此,如果一个新线程想要访问这个锁定的共享资源,它要么退出,要么必须不断轮询锁(并在等待锁时浪费处理器周期) 然而,监视器有条件变量,它为等待线程提供了一种更异步的方式——将线程置于等待队列中,从而不会使它们占用处理器周期 这是监视器相对于互斥体(或任何没有条件变量的通用锁定机制)的唯一优势吗?互斥体是低级构造。它们只是提供互斥和内存可见性/顺序。另一方面,监视器的级别更高—它们允许线程等待特定于应用程序的条件保持 因此,在某些情况下,监视

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

然而,监视器有条件变量,它为等待线程提供了一种更异步的方式——将线程置于等待队列中,从而不会使它们占用处理器周期


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

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


因此,在某些情况下,监视器只是在简单的锁定/解锁上做得过火了,但在大多数情况下,仅使用互斥锁还远远不够——因此您可以看到它们与一个或多个条件变量一起使用——从概念上讲,使用监视器是等效的。

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

这准确吗?据我所知,所有当前的操作系统都将互斥操作置于等待队列中。他们没有轮询。@ZanLynx:如果没有,我就看不出使用监视器比互斥体有什么好处。