count 7988 error 0 tmpA ()
mutex.lock(); keyPressed.wait(&mutex);
//Создаём воркеры и управляющий//count = 0; //Проверяем счётчикmutex.lock();if (count > 0) // условие не выполнится никогда keyPressed.wait(&mutex); //Что мы получаем? Ни один поток не начнёт никогда работать. Ибо в начале count = 0.
C++ (Qt)// thread workerforever { mutex.lock(); keyPressed.wait(&mutex); HandleTask(); mutex.unlock();}
C++ (Qt)//control threadforever { getchar(); mutex.lock(); CreateTask(); mutex.unlock(); keyPressed.wakeAll();}
C++ (Qt)// thread workerforever { mutex.lock(); if (!numTask) keyPressed.wait(&mutex); if (numTask) { --numTask; HandleTask(); } mutex.unlock();}
C++ (Qt)//control threadforever { getchar(); mutex.lock(); CreateTask(); ++numTask; mutex.unlock(); keyPressed.wakeAll();}
// thread workerforever { mutex.lock(); if (!numTask) keyPressed.wait(&mutex); if (numTask) { --numTask; HandleTask();// Вот тут выполняется задача. } mutex.unlock();}
//worker 1lockфункцияunlock//worker 2lockфункцияunlock//worker 3lockфункцияunlock
lock-unlock // worker'ы прибавили счётчик, освободили мутекс.//worker 1 worker 2 worker 3функция функция функцияlock-unlock // worker'ы убавили счётчик, освободили мутекс.
C++ (Qt)void HandleTask( void ){ ++count; mutex.unlock(); // мутекс освобождается, др потребители могут работать (если для них есть задачи) do_something(); mutex.lock(); --count;}