C++11中的条件变量支持把判断条件写到参数里。配合lamda表达式让程序代码更加清晰。第一个参数只支持unique_lock他和lock_guard的区别在于可以在作用域内加锁再解锁,而lock_gurad只能在构造和析构的时候加锁和解锁。
下面是对cv的小应用,轮流打印AB
#include <thread>
#include <iostream>
#include <mutex>
#include <condition_variable>
using namespace std;
mutex m;
condition_variable cv;
bool flag = true;
void printA()
{
while(1)
{
unique_lock<mutex>ul(m);
cv.wait(ul,[]{return flag;});
cout<<"A"<<endl;
flag=false;
cv.notify_one();
}
}
void printB()
{
while(1)
{
unique_lock<mutex>ul(m);
cv.wait(ul,[]{return !flag;});
cout<<"B"<<endl;
flag=true;
cv.notify_one();
}
}
int main()
{
std::thread tA(printA);
std::thread tB(printB);
tA.join();
tB.join();
return 0;
}
再附一个简单的线程安全队列模型
#includ