一、条件变量的引入
std::condition_variable 解决了死锁并且控制的资源的访问顺序二避免不必要的等待。当互斥操作不够用而引入的。比如,线程可能需要等待某个条件为真才能继续执行,而一个忙等待循环中可能会导致所有其他线程都无法进入临界区使得条件为真时,就会发生死锁。所以,condition_variable实例被创建出现主要就是用于唤醒等待线程从而避免死锁。std::condition_variable的 notify_one()用于唤醒一个线程;notify_all() 则是通知所有线程。
二、下面是一个引用的例子// threadTest.cpp: 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include #include #include #include #include #include using namespace std;std::deque q;std::mutex mu;std::condition_variable cond;void function_1() { int count = 10; while (count>0) { std::unique_lock locker(mu); q.push_back(count); locker.unlock(); cond.notify_all(); std::this_thread::sleep_for(chrono::seconds(1)); count--; }}void funciton_2() { int data = 0; while (data != 1) { std::unique_lock locker(mu); cond.wait(locker, [](){ return !q.empty(); }); data = q.back(); q.pop_back(); locker.unlock(); cout << "t2 get a value form t1 " << data << endl; }}int main(){ thread t1(function_1); thread t2(funciton_2); t1.join(); t2.join(); std::getchar(); return 0;}