在多线程中调度任务

时间:2012-12-12 16:42:58

标签: c++ multithreading scheduling task-queue job-scheduling

我正在尝试在多线程系统中安排任务。我的想法是每个线程有一个本地队列,每个线程将从其本地队列中获取作业。但是当线程达到某个阈值时,它不应该获取作业,而应该将作业转移到低于阈值级别的线程。

我怀疑如何设置线程的阈值。

2 个答案:

答案 0 :(得分:1)

解决此问题的另一种方法是让已完成队列的线程能够从其他队列中获取工作。这被称为“工作窃取”,并且是众所周知的调度算法,例如

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.38.8905

答案 1 :(得分:0)

您使用的是什么线程库?

我在所有线程项目TBB和Cilk Plus中都使用了两个OSS库。这些更高级别运行时提供的一个功能是它们以有效利用处理器资源的方式自动将任务调度到线程。运行时在负载平衡许多任务时也非常有效。

www.threadingbuildblocks.org

www.cilkplus.org