一,condition_variable使用步骤
创建一个scondition_variable对象。
创建一个互斥量对象mutex。
创建两个线程:等待线程和唤醒线程。
在等待线程中,使用unique_lock锁定互斥量,并调用wait函数进入等待状态。
在唤醒线程lock_guard锁定互斥量,并调用notify_one或notify_all函数唤醒等待的线程。
二 代码
#include <iostream>
#include <thread>
#include <mutex>
using namespace std;
mutex mtx;
condition_variable cv;
void my_thread()
{
unique_lock<mutex> lock(mtx);
cv.wait(lock); //会释放互斥量,然后等待通知
cout << "thread is nofified" << endl;
}
int main()
{
thread t = thread(my_thread);
this_thread::sleep_for(chrono::seconds(1));
// lock变量离开其作用域,则释放互斥量的锁。因此必须用{}包含起来。
{
lock_guard<mutex> lock(mtx);
}
//释放互斥锁
cv.notify_all();
t.join();
return 0;
}