三个线程会了的话,两个线程也会了吧。
#include <iostream>
#include <mutex>
#include <condition_variable>
#include <thread>
using namespace std;
mutex mtx;
condition_variable cv;
int flag = 0;
int i=0;
void print1(){
//unique_lock<mutex> ulock(mtx);
while(true){
unique_lock<mutex> ulock(mtx);
while(flag!=0){
cv.wait(ulock);
}
flag=1;
if(++i>100){
cv.notify_all();
break;
}
cout<<"thread a and i=="<<" "<<i<<endl;
cv.notify_all();
}
}
void print2(){
//unique_lock<mutex> ulock(mtx);
while(true){
unique_lock<mutex> ulock(mtx);
while(flag!=1){
cv.wait(ulock);
}
flag=2;
if(++i>100){
cv.notify_all();
break;
}
cout<<"thread b and i=="<<" "<<i<<endl;
cv.notify_all();
}
}
void print3(){
//unique_lock<mutex> ulock(mtx);
while(true){
unique_lock<mutex> ulock(mtx);
while(flag!=2){
cv.wait(ulock);
}
flag=0;
if(++i>100){
cv.notify_all();
break;
}
cout<<"thread c and i=="<<" "<<i<<endl;
cv.notify_all();
}
}
int main()
{
cout << "print 100 by order abc" << endl;
thread a(print1), b(print2), c(print3);
a.join();
b.join();
c.join();
return 0;
}
参考:
https://blog.csdn.net/song_upbeat/article/details/115498096?spm=1001.2014.3001.5506