reference:http://www.cplusplus.com/reference/condition_variable/condition_variable/
A condition variable is an object able to block the calling thread until notified to resume
It uses a unique_lock (over a mutex) to lock the thread when one of its wait functions is called. The thread remains blocked until woken up by another thread that calls a notification function on the same condition_variable object.
#include<iostream>
#include<vector>
#include<algorithm>
#include<mutex>
#include<condition_variable>
using namespace std;
mutex mu;
condition_variable cond;
bool ready = false;
void thread_wait(int id) {
unique_lock<mutex> locker(mu);
while (!ready) {
cond.wait(locker);
}
cout << "thread " << id << endl;
}
void go() {
unique_lock<mutex> locker(mu);
ready = true;
cond.notify_all();
}
int main() {
thread threads[10];
for (int i = 0; i < 10; i++)
{
threads[i] = thread(thread_wait, i);
}
go();
for (auto & th : threads) {
th.join();
}
getchar();
return 0;
}