条件variables,互斥锁和锁之间的区别

例如c ++ 0x接口

我很难搞清楚什么时候使用这些东西(cv,mutex和lock)。 任何人都可以请解释或指向一个资源?

提前致谢。

在你所指的页面上,“mutex”是实际的低层同步原语。 你可以使用一个互斥锁然后释放它,并且只有一个线程可以在任何时候使用它(因此它是一个同步原语)。 recursion互斥是一个可以被同一个线程多次使用的recursion互斥,然后在同一个线程中被多次释放,然后其他人就可以使用它。

这里的“锁”只是一个C ++包装类,它在其构造函数中使用互斥锁,并在析构函数中释放它。 这对build立C ++作用域的同步很有用。

一个条件variables是一个更高级的高级forms的同步原语,它把一个锁与一个“信号”机制结合起来。 当线程需要等待资源变为可用时使用它。 线程可以在CV上“等待”,然后资源生产者可以“发信号”给variables,在这种情况下,等待CV的线程得到通知,并且可以继续执行。 一个互斥体和CV结合起来,以避免线程开始在CV上等待另一个线程想要发信号的竞争条件; 那么信号是传递还是丢失是不可控制的。

我不太熟悉W / C ++ 0x所以采取这个答案W /一粒盐。

回复:互斥锁与锁:从你发布的文档看, mutex是一个代表操作系统互斥体的对象,而lock则是一个保存互斥体以促进RAII模式的对象 。

条件variables是一种将阻塞/信号机制(信号+等待)与互斥机制相关联的便捷机制,但是它们可以在操作系统中保持解耦状态,以便系统程序员可以selectcondvar和mutex之间的关联。 (对处理多个同时访问的对象很有用)Rob Krten 在QNX的一本在线章节中对condvars有一些很好的解释 。

至于一般的参考文献: 这本书 (还没有出来)看起来很有趣。