#include<iostream>
#include<thread>
#include<mutex>
#include<condition_variable>
using namespace std;
mutex mymutex;
condition_variable cv;
int flag=0;
void printa(){
unique_lock<mutex> lk(mymutex);
int count=0;
while(count<10){
while(flag!=0) cv.wait(lk);
cout<<"thread 1: a"<<endl;
flag=1;
cv.notify_all();
count++;
}
cout<<"my thread 1 finish"<<endl;
}
void printb(){
unique_lock<mutex> lk(mymutex);
for(int i=0;i<10;i++){
while(flag!=1) cv.wait(lk);
cout<<"thread 2: b"<<endl;
flag=2;
cv.notify_all();
}
cout<<"my thread 2 finish"<<endl;
}
void printc(){
unique_lock<mutex> lk(mymutex);
for(int i=0;i<10;i++){
while(flag!=2) cv.wait(lk);
cout<<"thread 3: c"<<endl;
flag=0;
cv.notify_all();
}
cout<<"my thread 3 finish"<<endl;
}
int main(){
thread th2(printa);
thread th1(printb);
thread th3(printc);
th1.join();
th2.join();
th3.join();
cout<<" main thread "<<endl;
}
[C++]三个线程交替打印ABC
最新推荐文章于 2024-03-29 11:57:06 发布