使用锁和条件变量实现主线程和线程1到9的交替打印
锁的头文件 <mutex>
条件变量的头文件 <condition_variable>
#include<iostream>
#include<mutex>
#include<condition_variable>
using namespace std;
bool flag = true;// 标志位默认为true
mutex mtx;// 互斥锁
condition_variable cond;// 条件变量
void printNum(int i)// 打印数字1-9
{
int times = 1;
while (times <= 9) {
unique_lock<std::mutex> lock(mtx);// 独占锁加锁
// i=0执行线程,i=1执行主线程
if (i == 0)
cond.wait(lock, [] {return flag; });// flag为false时,wait阻塞,并且lock.unlock
if (i == 1)
cond.wait(lock, [] {return !flag; });// flag为true时,wait阻塞,并且lock.unlock
cout << this_thread::get_id() << ":" << times << endl;
times++;
if (i == 0)
flag = false;
if (i == 1)
flag = true;
cond.notify_one();// 通知另一个阻塞线程执行任务
}
}
int main() {
std::thread t (printNum, 0);// 线程
printNum(1);// 主线程
t.join();
return 0;
}