【发布时间】:2015-12-22 23:13:36
【问题描述】:
当我有多个线程等待执行时,我试图了解 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
【问题讨论】:
标签: c++ c++11 condition-variable