原文:http://www.modernescpp.com/index.php/c-core-guidelines-be-aware-of-the-traps-of-condition-variables
条件变量支持一个很简单的功能,一个线程准备好数据,然后向另外一个线程发送通知,通知另一个线程处理这些数据.为什么有可能会很危险呢?
不要无条件等待
有这样的一个规则:一个没有条件(condition)的等待有可能错失线程唤醒,或者线程唤醒后没有工作可做.这句话是什么意思呢?条件变量有可能存在两个问题:丢失线程唤醒和虚假唤醒(spurious wakeup),条件变量的一个问题就是他们不占内存.
首先我们先来看这样一段程序:
// conditionVariables.cpp
#include <condition_variable>
#include <iostream>
#include <thread>
std::mutex mutex_;
std::condition_variable condVar;
bool dataReady{false};
void waitingForWork(){
std::cout << "Waiting " << std::endl;
std::unique_