C++ (Qt)// thread workerforever { mutex.lock(); while (!numTask) keyPressed.wait(&mutex); --numTask; HandleTask(); mutex.unlock();}
C++ (Qt)//control threadforever { // numTask = 0 getchar(); // Пользователь нажал кнопку mutex.lock(); CreateTask(); ++numTask; // numTask = 1 mutex.unlock(); keyPressed.wakeAll(); // Проснулись рабочие нитки, первая установит numTask = 0 и пойдет работать, а остальные рабочие нитки уснут на wait}
Просто добавляем счетчик// thread workerforever { mutex.lock(); if (!numTask) keyPressed.wait(&mutex); if (numTask) { --numTask; HandleTask(); } mutex.unlock();}//control threadforever { getchar(); mutex.lock(); CreateTask(); ++numTask; mutex.unlock(); keyPressed.wakeAll();}