#include <iostream>
#include <condition_variable>
#include <thread>
#include <chrono>
std::condition_variable cv;
std::mutex cv_m;
int i = 0;
void waits()
{
std::unique_lock<std::mutex> lk(cv_m);
std::cerr << "thread 1 Waiting... \n";
cv.wait(lk);
std::cerr << "thread 1 finished waiting.\n";
}
void signals()
{
std::this_thread::sleep_for(std::chrono::seconds(1));
{
std::lock_guard<std::mutex> lk(cv_m);
std::cerr << "thread 2 Notifying...\n";
}
std::cerr << "thread 2 notify_all\n";
cv.notify_all();
}
int main()
{
std::cerr << "start t1 and t2 start\n";
std::thread t1(waits), t2(signals);
std::cerr << "start t1 and t2 over\n";
t1.join();
t2.join();
}
如代码所示,整个程序一个条件变量通过调用wait函数(cv.wait(lk))来让其所在的线程阻塞,同时此时这县城之前lock到的那把锁自动释放,该线程阻塞着直到在其他线程中这个条件变量调用notify(cv.notify_all()),此时该线程停止阻塞继续往下走。