Каков хороший способ расставить приоритеты потоков, ожидающих одной и той же операции блокировки в C++?

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

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

Тривиальный пример.

Есть 3 рабочих и 111 задач, одна задача в секунду отправляется в очередь. Каждая задача занимает около 1 секунды для обработки. Приоритеты работников - 10, 1, 100. Затем рабочие должны выдвинуть около 10, 1 и 100 заданий каждый.


Есть ли удобный способ реализовать такой механизм, используя стандартные условные переменные и мьютексы? - Вероятностный подход в порядке.

1 ответ

Создать priority_queue ожидающих потоков. Когда новое задание добавляется в очередь заданий, выведите ветку min из priority_queue справиться с новой задачей.

Другие вопросы по тегам