三个线程交替打印ABC
#include<iostream>
#include<thread>
#include<mutex>
#include<condition_variable>
using namespace std;
mutex mtx;
condition_variable cv;
int flag=0;
void printA(){
unique_lock<mutex> lk{mtx};
int cnt=0;
while(cnt<10){
while(flag!=0){
cv.wait(lk);
}
cout<<"A"<<endl;
flag=1;
cnt++;
cv.notify_all();
}
}
void printB(){
unique_lock<mutex> lk{mtx};
int cnt=0;
while(cnt<10){
while(flag!=1){
cv.wait(lk);
}
cout<<"B"<<endl;
flag=2;
cnt++;
cv.notify_all();
}
}
void printC(){
unique_lock<mutex> lk{mtx};
int cnt=0;
while(cnt<10){
while(flag!=2){
cv.wait(lk);
}
cout<<"C"<<endl;
flag=0;
cnt++;
cv.notify_all();
}
}
int main(){
thread t1(printA);
thread t2(printB);
thread t3(printC);
t1.join();
t2.join();
t3.join();
return 0;
}