条件变量、互斥锁和锁之间的区别
-
20-08-2019 - |
题
解决方案
在你指的是页面,“互斥”是实际的低级别的同步原语。你可以把一个互斥体,然后松开,只有一个线程可以把它在任何一个时间(因此它是一个同步原语)。递归互斥是一个可以采取由相同螺纹多次,并且然后它需要由同一个线程被释放多次其他人可以把它之前。
一个“锁定”在这里仅仅是一个C ++包装类,在析构函数需要互斥在其构造和释放它。它是用于建立用于C ++作用域同步是有用的。
一个状态变量是同步原语的一个更先进/高级别形式相结合的锁定用“信令”机制。当线程需要等待资源可用时使用。一个线程可以在CV“等待”,然后资源生产者可以“信号”的变量,在这种情况下,谁等待CV线程得到通知,可以继续执行。互斥与CV相结合,避免在一个线程开始等待另一个线程需要告知它的同时CV的竞争条件;然后它是不可控的信号是否被传递或丢失。
其他提示
我对 C++0x 不太熟悉,所以对这个答案持保留态度。
关于:互斥体对比锁:从您发布的文档来看,它看起来像 mutex
是一个代表操作系统互斥体的对象,而 lock
是一个持有互斥锁的对象,以方便 RAII模式.
条件变量是一种方便的机制,可将阻塞/信号机制(信号+等待)与互斥机制关联起来,同时使它们在操作系统中保持解耦,以便系统程序员可以选择 condvar 和互斥体之间的关联。(对于处理多组并发访问的对象很有用)Rob Krten 有一些 关于 condvars 的很好的解释 在他的在线章节之一中 关于 QNX 的书.
就一般参考而言: 这本书 (还没出来)看起来很有趣。
不隶属于 StackOverflow