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

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

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

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

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


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

3

Решение

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]