C++ 线程池理解问题

C++ 线程池理解问题,c++,multithreading,parallel-processing,threadpool,C++,Multithreading,Parallel Processing,Threadpool,我试图找出一种方法,如何在线程池中对齐任务。 我有4个(并行)线程,在开始(每个线程执行步骤)时有10个任务。我的第一次尝试是测量每个任务的时间,并根据该时间在线程中找到任务的最佳组合,以获得可能的最佳结果。我正试图基于本文编写一个并行游戏引擎 问题是我的“解决方案”不起作用。还有其他方法来调整任务吗 (该项目使用c++)您应该从intels可视化计算站点查看smoke(其多线程处理技术演示引擎)和nullstien,它们都处理线程池任务(nullstien有两个变体,一个基于tbb的调度器和一

我试图找出一种方法,如何在线程池中对齐任务。 我有4个(并行)线程,在开始(每个线程执行步骤)时有10个任务。我的第一次尝试是测量每个任务的时间,并根据该时间在线程中找到任务的最佳组合,以获得可能的最佳结果。我正试图基于本文编写一个并行游戏引擎

问题是我的“解决方案”不起作用。还有其他方法来调整任务吗


(该项目使用c++)

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

您应该查看这两个smoke(他们的多线程处理技术演示引擎)和intels visual computing网站上的nullstien,他们都处理线程池任务(nullstien有两个变体,一个基于tbb的调度程序和一个自定义构建的调度程序)

要在并行线程中对齐任务,请使用信号量、事件和互斥锁。 不要测量任务所花费的时间。线程最多是随机执行的。 如果您在并行线程中执行4个任务,那么前2个任务可能会在后2个任务开始之前完成。 下面是如何正确地做到这一点

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

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

这样,task3将始终在task1完成后执行。要在并行线程中对齐任务,请使用信号量、事件和互斥量。 不要测量任务所花费的时间。线程最多是随机执行的。 如果您在并行线程中执行4个任务,那么前2个任务可能会在后2个任务开始之前完成。 下面是如何正确地做到这一点

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

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

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

这是什么语言?如果是Java,您可以使用JDK 7中的新类来保持线程同步。使用现有框架(如TBB或PPL)来管理这一点要容易得多。它会,但我想了解它是如何完成的。这是什么语言?如果是Java,您可以使用JDK 7中的新类来保持线程的同步。使用现有的框架(如TBB或PPL)来管理这一点会容易得多。会的,但我想了解它是如何做到的。