Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+;中,对等待相同阻塞操作的线程进行优先级排序的好方法是什么+;?_C++_Multithreading_Algorithm_C++11_Thread Priority - Fatal编程技术网

C++ 在C+;中,对等待相同阻塞操作的线程进行优先级排序的好方法是什么+;?

C++ 在C+;中,对等待相同阻塞操作的线程进行优先级排序的好方法是什么+;?,c++,multithreading,algorithm,c++11,thread-priority,C++,Multithreading,Algorithm,C++11,Thread Priority,只有一个阻塞队列。有一个相同的工作线程池,当有东西被推送到队列中时,它们只是等待条件变量,然后尝试从队列中弹出。假设队列包含任务 在理想情况下,线程将统一弹出任务。我想给这个概率加上一些偏差,这样每个工人都会根据任务的优先级,弹出总任务量的一定百分比。但是,如果队列中有未处理的任务,则任何线程都不应故意处于空闲状态 微不足道的例子。 有3个工人,111个任务,每秒一个任务进入队列。处理每个任务大约需要1秒的时间。工人的优先顺序是10、1100。然后,工人们应该分别完成10个、1个和100个任务

只有一个阻塞队列。有一个相同的工作线程池,当有东西被推送到队列中时,它们只是等待条件变量,然后尝试从队列中弹出。假设队列包含任务

在理想情况下,线程将统一弹出任务。我想给这个概率加上一些偏差,这样每个工人都会根据任务的优先级,弹出总任务量的一定百分比。但是,如果队列中有未处理的任务,则任何线程都不应故意处于空闲状态

微不足道的例子。 有3个工人,111个任务,每秒一个任务进入队列。处理每个任务大约需要1秒的时间。工人的优先顺序是10、1100。然后,工人们应该分别完成10个、1个和100个任务



是否有一种使用标准条件变量和互斥体实现这种机制的方便方法概率方法很好。

创建等待线程的
优先级队列。将新任务添加到任务队列时,从
优先级\u队列中弹出min线程来处理新任务。

而不是添加线程优先级,只需给每个线程分配自己的队列,并让任务分配者根据您的优先级规则处理任务?@Malkocoglu然后我必须实现任务窃取机制,以防止单个线程饥饿。这就是我试图避免的。你可以添加一个“代理”,它是唯一通知新任务的;然后它可以根据工人分配工作priority@Sga:但此代理如何知道谁可用?本质上,您似乎建议重新实现一个内置了优先级方面的条件变量。@Sga这是我的错-我必须重新表述这个问题。但是Matthieu M.的想法是:如果线程空闲,就不应该等待,但是如果单个任务有多个挂起线程,那么优先级应该生效。因此,简而言之:创建一个条件变量,但用等待线程的优先级列表替换等待线程的列表:)