线程池理解问题

时间:2011-08-07 12:18:34

标签: c++ multithreading parallel-processing threadpool

我正试图找出一种如何在线程池中对齐任务的方法。 我有4个(并行)线程,并且在每个线程执行步骤的开头有10个任务。我的第一次尝试是测量每个任务的时间,并根据该时间找到线程中最佳的任务组合,以获得最佳结果。我正在尝试根据这篇文章http://software.intel.com/en-us/articles/designing-the-framework-of-a-parallel-game-engine/

编写一个并行游戏引擎

问题在于我的“解决方案”不起作用。有没有更多方法来协调任务?

(该项目采用c ++)

2 个答案:

答案 0 :(得分:1)

要在并行线程中对齐任务,请使用信号量,事件,互斥锁。 不要衡量任务所需的时间。线程最多随机执行。 如果你在并行线程中执行4个任务,前两个任务可能会在第二个2开始之前完成。 这是如何正确地做到这一点

void Thread1()
{
    task1();
    semaphore1.Release()
}

void Thread2()
{
    task2();
    semaphore1.WaitOne();
    task3();
}

这样,task3将在task1完成后始终执行

答案 1 :(得分:0)

你应该检查两个smoke(他们的多线程处理技术演示引擎)和来自intels可视化计算站点的nullstien,他们都处理线程池任务(nullstien有两个变体,一个基于tbb的调度程序和一个自定义构建的一个)