简介
利用条件变量实现线程同步;
Example
读写变量同步:
写完变量后将标志位 ready 置为 true,读完变量后将ready 置为 false
#include <iostream>
#include <mutex>
#include <condition_variable>
#include <thread>
#include <chrono>
using namespace std;
condition_variable cv;
mutex m_mutex;
int i = 0;
bool ready = true;
void Add(){
while(1){
this_thread::sleep_for(chrono::milliseconds(500));
unique_lock<mutex> lc(m_mutex);
while(ready)
cv.wait(lc);
// cv.wait(lc,[]{return !ready;});
//modify the data
i++;
ready = true;
cv.notify_all();
}
}
void Read(){
while(1){
this_thread::sleep_for(chrono::milliseconds(1));
unique_lock<mutex> lc(m_mutex);
while(!ready)
cv.wait(lc);
// cv.wait(lc,[]{return ready;});
//Read the data
cout<<i<<endl;
ready = false;
cv.notify_all();
}
}
int main(int argc, char** argv)
{
thread add(Add);
thread read(Read);
add.join();
read.join();
return 1;
}