Существует одна очередь блокировки. Существует пул идентичных работников, которые просто ожидают условную переменную, когда что-то помещается в очередь, и пытаются выскочить из очереди. Допустим, эта очередь содержит задачи.
В идеальной ситуации потоки будут выполнять задачи равномерно. Я хочу добавить некоторую предвзятость к этой вероятности, чтобы каждый работник получал определенный процент от общего количества задач — в соответствии с его приоритетом. Но ни один поток не должен намеренно простаивать, если в очереди есть необработанные задачи.
Есть 3 рабочих и 111 задач, одна задача в секунду отправляется в очередь. Каждая задача занимает около 1 секунды для обработки. Приоритеты работников 10, 1, 100. Тогда рабочие должны около 10, 1 и 100 заданий каждый.
Есть ли удобный способ реализовать такой механизм, используя стандартные условные переменные и мьютексы? — Вероятностный подход в порядке.
Создать priority_queue
ожидающих потоков. Когда новое задание добавляется в очередь заданий, выведите поток min из priority_queue
справиться с новой задачей.
Других решений пока нет …