Вы должны построить свой код так, чтобы без какой-либо переменной условия он все еще работал.Если он будет работать, если он заблокировал мьютекс, проверил условие, разблокировал мьютекс и сразу повторил цикл, тогда он будет работать с условной переменной, только более эффективно.
Реализация могла бы вызывать переменные условия каждые 10 миллисекунд, если бы захотелось по какой-то причине, или было какое-то странное взаимодействие с такими инструкциями, как MWAIT, строки кэша и транзакционные блокировки или некоторые другие.другая странная аппаратная особенность.
Кажется, я вспоминаю чтение об архитектуре, которая будет сигнализировать о событиях ожидания в ячейках памяти всякий раз, когда записывается какая-либо часть этой строки кэша.И библиотека потоков не дополнила структуру до размера строки кэша.
Так что ДА вам, возможно, придется обрабатывать сотни пробуждений в секунду, и ваш код все равно должен работать правильно.
Из того, что я вижу из того, что вы написали, у вас есть только одно место, в котором вы проверяете предикат , то есть условие, которое должно быть истинным, чтобы пройти через это условие.И перед каждым уведомлением вы должны были обновить предикат.Предикат всегда должен быть записан или прочитан, в то время как он защищен той же блокировкой, что и переменная условия.
Если вам нужно другое поведение, вы можете использовать семафор .