【发布时间】:2014-03-26 09:45:04
【问题描述】:
只有一个阻塞队列。有一个相同的工人池,当某些东西被推入队列时,它们只是等待条件变量,并尝试从队列中弹出。假设队列包含任务。
在理想情况下,线程会统一弹出任务。我想为该概率添加一些偏差,以便每个工人将弹出任务总量的一定百分比 - 根据它的优先级。但是,如果队列中有未处理的任务,则不应有任何线程故意空闲。
简单的例子。
有 3 个 worker,111 个任务,每秒一个任务进入队列。每个任务大约需要 1 秒的时间来处理。工人的优先级是 10、1、100。然后工人应该分别弹出 大约 10、1 和 100 个任务。
有没有使用标准条件变量和互斥锁实现这种机制的便捷方法? - 概率方法很好。
【问题讨论】:
-
不加线程优先级,只给每个线程自己的队列,让任务经销商按照你的优先级规则处理任务?
-
@Malkocoglu 然后我必须实现任务窃取机制以防止单个线程的饥饿。这就是我要避免的。
-
您可以添加一个“代理”,它是唯一通知新任务的;然后它可以根据工人优先级分配工作
-
@Sga: 但是这个代理怎么知道谁有空呢?从本质上讲,您似乎是在建议重新实现具有内置优先级方面的条件变量。
-
@Sga 那是我的错 - 我必须重新提出这个问题。但是 Matthieu M. 明白了:如果线程处于空闲状态,则不应等待,但如果单个任务有多个待处理线程,则优先级应该生效。
标签: c++ multithreading algorithm c++11 thread-priority