void drive() { // do wakeups for (unsigned i = 0; i<threads.size(); ++i) { this_thread::sleep_for(chrono::milliseconds(rand()%100)); sem.notify(); } }