我正试图找出一种如何在线程池中对齐任务的方法。 我有4个(并行)线程,并且在每个线程执行步骤的开头有10个任务。我的第一次尝试是测量每个任务的时间,并根据该时间找到线程中最佳的任务组合,以获得最佳结果。我正在尝试根据这篇文章http://software.intel.com/en-us/articles/designing-the-framework-of-a-parallel-game-engine/
编写一个并行游戏引擎问题在于我的“解决方案”不起作用。有没有更多方法来协调任务?
(该项目采用c ++)
答案 0 :(得分:1)
要在并行线程中对齐任务,请使用信号量,事件,互斥锁。 不要衡量任务所需的时间。线程最多随机执行。 如果你在并行线程中执行4个任务,前两个任务可能会在第二个2开始之前完成。 这是如何正确地做到这一点
void Thread1()
{
task1();
semaphore1.Release()
}
void Thread2()
{
task2();
semaphore1.WaitOne();
task3();
}
这样,task3将在task1完成后始终执行
答案 1 :(得分:0)
你应该检查两个smoke(他们的多线程处理技术演示引擎)和来自intels可视化计算站点的nullstien,他们都处理线程池任务(nullstien有两个变体,一个基于tbb的调度程序和一个自定义构建的一个)