// thread worker forever { mutex.lock(); keyPressed.wait(&mutex); ++count; mutex.unlock(); do_something(); mutex.lock(); --count; mutex.unlock(); }//control thread forever { getchar(); mutex.lock(); // Sleep until there are no busy worker threads while (count > 0) { mutex.unlock(); sleep(1); mutex.lock(); } keyPressed.wakeAll(); mutex.unlock(); }
while (count > 0) {// тут mutex.unlock(); sleep(1); mutex.lock();// тут }
// thread worker forever { mutex.lock(); keyPressed.wait(&mutex); //ждём wake ++count; mutex.unlock(); do_something(); mutex.lock(); --count; mutex.unlock(); } //control thread forever { getchar(); // а тут ждём нажатия чела для последующей итерации mutex.lock(); // Sleep until there are no busy worker threads while (count > 0) { //если есть работающие потоки, тогда даём им захватывать мутекс и закончить обработку. mutex.unlock(); sleep(1); mutex.lock(); } keyPressed.wakeAll(); // пробуждаем потоки все, они просыпаются и ждут освобождения мутекса (или крах если с одного потока) mutex.unlock(); // а тут уже даём им старт }
// thread worker forever { mutex.lock(); keyPressed.wait(&mutex); //ждём wake ++count;...