condition_variable_any

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();
}
原文地址:https://www.cnblogs.com/anit/p/4727531.html