c – 了解std :: condition_variables
当我有多个线程等待执行时,我正在尝试理解condition_variable的流程.根据我的理解,所有线程都会尝试获取唯一的锁,一个会得到它然后进入wait(),如果你调用notify_all,最多不会有一个线程等待允许通过.直到它释放它的锁并允许其他线程通过.
cv是否与唯一锁通信并让所有线程同时通过所有线程?如果是这样的话,它确实是一次性的,或者线程是否依次顺序通过.
std::condition_variable cv;
std::mutex cv_m; // This mutex is used for three purposes:
// 1) to synchronize accesses to i
// 2) to synchronize accesses to std::cerr
// 3) for the condition variable cv
int i = 0;
void waits()
{
std::unique_lock<std::mutex> lk(cv_m);
std::cerr << "Waiting... \n";
cv.wait(lk, []{return i == 1;});
std::cerr << "...finished waiting. i == 1\n";
}
http://en.cppreference.com/w/cpp/thread/condition_variable/notify_all