- 使用两个条件变量实现:
#include <iostream>
#include<thread>
#include<mutex>
#include<atomic>
#include<condition_variable>
#include<unistd.h>
using namespace std;
std::mutex mtx;
condition_variable cond1, cond2;
int num = 1;
void func_odd(){
while(1){
unique_lock<mutex> locker(mtx);
cout << "thread1 : " << num++ << endl;
cond2.notify_one();
cond1.wait(locker);
}
}
void func_even(){
while(1){
sleep(1);
unique_lock<mutex> locker(mtx);
cout << "thread2 : " << num++ << endl;
cond1.notify_one();
cond2.wait(locker);
}
}
int main(){
thread t1(func_odd);
thread t2(func_even);
t1.join();
t2.join();
return 0;
}
2. 使用一个条件变量实现:
#include <iostream>
#include<thread>
#include<mutex>
#include<condition_variable>
#include<unistd.h>
using namespace std;
std::mutex mtx;
condition_variable cond;
bool state = 1;
int num = 1;
void func(int index, bool stateNeed){
while(1){
unique_lock<mutex> locker(mtx);
cout << "thread " << index << ", num is : " << num++ << endl ;
state = !state;
cond.notify_one();
cond.wait(locker, [stateNeed](){return state == stateNeed;});
sleep(1);
}
}
int main(){
thread t1(func, 1, true);
thread t2(func, 2, false);
t1.join();
t2.join();
return 0;
}
此处注意cout后必须跟endl,原因是endl有flush功能,如果不加endl可能会出现不能打印的情况。