Самый простой вариант - заставить рабочие потоки ожидать переменную условия, которая сигнализируется при входе в задание для их чтения.
Вам понадобится мьютекс, который блокируется, пока вы проверяете условие.Когда вы ожидаете переменную условия, она автоматически разблокирует соответствующий мьютекс, пока условие не будет сигнализировано, и в этот момент ваш поток получит его.Вы должны проверить свое состояние еще раз.
У вас может быть одна переменная условия для каждой очереди или одна для всех потоков, это зависит от того, как вы масштабируете.