C++ (Qt)// "потребитель" forever { mutex.lock(); keyPressed.wait(&mutex); ++count; mutex.unlock(); do_something(); mutex.lock(); --count; mutex.unlock(); } // производительforever { getchar(); mutex.lock(); keyPressed.wakeAll(); mutex.unlock(); }
C++ (Qt) mutex.lock(); // захватил мутекс keyPressed.wait(&mutex); // освобождаю и жду ++count; // здесь если я получил управление, то я же и владею мутексом
C++ (Qt) mutex.lock(); // захватил мутекс keyPressed.wakeOne(); // бужу/будю mutex.unlock(); // так чей же мутекс??? Мой или того кто проснулся?
C++ (Qt)// обработчикwhile (true) { mutex.lock(); // захватили мутекс - будить никто не сможет (пока) if (!data.size()) // если данных еще нет - освобождаем мутекс и ждем побудки myCondition.wait(&mutex); // теперь мутекс опять наш int val = data.takeAt(0); // отхватили кусок данных под защитой mutex.unlock(); // освободили данные DoCalc(val); // обрабатываем}
C++ (Qt)// читательwhle (true) { getchar(); // ждем символа theSemaphore.release(); // открываем семафор} // писвтельwhle (true) { theSemaphore.acquire(); // ждем на семафоре printf("pressed"); // печатаем}