C++ C+中的条件变量与互斥体+;性病

C++ C+中的条件变量与互斥体+;性病,c++,synchronization,C++,Synchronization,我不理解条件变量和互斥体之间的区别。在我看来,它描述得不够清楚 有人能独立于任何编程语言来解释它吗?一个C++的STD也有具体的解释?< P>带有互斥和锁的线程通常会把线程放在睡眠中直到互斥锁被解锁。(或者,如果它已解锁,您只需锁定它并继续,而不需要所有睡眠部分) 使用条件变量,您将线程置于睡眠状态,直到它被要求唤醒并继续(通过notify_one和notify_all方法)-通常建议您添加一个条件以唤醒,线程在收到通知后进行验证。用例有很大不同。互斥锁非常原始,它们只确保只有一个线程可以拥有锁

我不理解条件变量和互斥体之间的区别。在我看来,它描述得不够清楚


有人能独立于任何编程语言来解释它吗?一个C++的STD也有具体的解释?

< P>带有互斥和锁的线程通常会把线程放在睡眠中直到互斥锁被解锁。(或者,如果它已解锁,您只需锁定它并继续,而不需要所有睡眠部分)


使用条件变量,您将线程置于睡眠状态,直到它被要求唤醒并继续(通过
notify_one
notify_all
方法)-通常建议您添加一个条件以唤醒,线程在收到通知后进行验证。

用例有很大不同。互斥锁非常原始,它们只确保只有一个线程可以拥有锁。条件变量使您可以对更复杂的情况进行建模,因为任何线程都可以向阻塞的线程发出继续的信号

典型情况如下:

浴室:你要确保在任何时候只有一个人可以使用它。当人员进入时,锁上门,并在完成后让门打开。这将是一个互斥


生产链:几个工人生产项目A,工人W需要该项目来生产项目B。每当一个工人完成项目A时,他们将其放入队列,并向工人W发出信号,表示他们可以继续在B上工作。这将是一个条件变量(条件为:项目A可用).

如果您解释一下您认为它们是如何相同的,也许会有所帮助,因为这并不明显(我看不出来)@formerlyknownas_463035818至少在std中,这两个线程都处于阻塞状态以避免争用条件,并在关键部分完成执行后唤醒一个线程。互斥锁就是它的名称所表示的:一种互斥锁定机制。条件变量是一种信号机制。加上互斥锁始终保护的某种谓词数据(标志、计数器、某些..“状态”)(在没有当前线程锁定的互斥锁的情况下,决不检查或更改谓词数据),它们构成了并发程序体系结构中的一个强大工具。TL;条件变量用于表示谓词数据中的状态变化,互斥体提供对该数据的独占访问。前者旨在与后者协调工作。