std::condition_variable
是条件变量,当 std::condition_variable
对象的某个wait
函数被调用的时候,它使用 std::unique_lock
(通过 std::mutex
) 来锁住当前线程。当前线程会一直被阻塞,直到另外一个线程在相同的 std::condition_variable
对象上调用了 notification
函数来唤醒当前线程。
#include <thread>
#include <iostream>
#include <mutex>
#include <condition_variable>
std::mutex data_mutex;
std::condition_variable data_var;
int flag=1;
int i=0;
#define MAXNUM 100
void printA(){
while(i<MAXNUM){
// std::this_thread::sleep_for(std::chrono::seconds(1)); //打印节奏变慢
std::unique_lock<std::mutex> lck(data_mutex);
//当flag为1时,wait不阻塞;否则wait阻塞当前线程。
//允许其他锁住的线程继续,当其他线程调用notify函数后,并且flag为1时
//此线程被唤醒
data_var.wait(lck, []{return flag==1;});
flag=2;
if(i >= 100){
data_var.no