关于C#:线程池的理解问题

Thread pool understanding problem

我正在尝试找出一种方法来对齐线程池中的任务。
我有4个(并行)线程,在开始(每个线程执行步骤的开始)有10个任务。我的第一个尝试是测量每个任务的时间,然后根据该时间在线程中找到任务的最佳组合,以获得可能的最佳结果。我正在尝试根据本文http://software.intel.com/zh-cn/articles/designing-the-framework-of-a-parallel-game-engine/

编写并行游戏引擎

问题是我的"解决方案"不起作用。还有其他对齐任务的方法吗?

(项目在c中)


要在并行线程中对齐任务,请使用信号量,事件,互斥量。
不要测量任务花费的时间。线程最多随机执行。
如果要在并行线程中执行4个任务,则前两个任务甚至可能在第二个任务开始之前完成。
这是正确执行操作的方法

1
2
3
4
5
6
7
8
9
10
11
12
void Thread1()
{
    task1();
    semaphore1.Release()
}

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

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


您应该从intels视觉计算站点上检查一下Smoke(他们的多线程处理技术演示引擎)和nullstien,它们都可以处理线程池任务(nullstien有两个变体,一个是基于tbb的调度程序,另一个是定制的)。