1. 来自链接http://en.cppreference.com/w/cpp/thread/condition_variable_any/wait
添加注释
std::condition_variable_any 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); i++; std::cerr << "Waiting... "; cv.wait(lk); //wait会释放锁,其他的因锁被block的线程会继续,一旦收到notification锁会继续被占用 std::cerr <<i<< "...finished waiting. i == 1 "; } void signals() { std::this_thread::sleep_for(std::chrono::seconds(5)); { std::lock_guard<std::mutex> lk(cv_m); std::cerr << "Notifying... "; } cv.notify_all(); std::cerr << "signals... "; } int main() { std::thread t1(waits), t2(waits), t3(waits), t4(signals); t1.join(); t2.join(); t3.join(); t4.join(); }