我使用的是Native C ++(没有.Net或/ clr),并且如果可能的话,希望在不依赖外部库或第3方库的情况下或没有这种依赖的情况下做到这一点。

为了尽可能明确我的问题,请考虑三个功能task1(),task2()和task3()。每个都是迭代过程中步骤的一部分,即:

    while(true)
    {
      task1();
      task2();
      task3();
    }


我正在寻找一种并行执行task1()和task(3)的方法。为了重申这一点,以下是允许的并行化:

开始-> task1()-> task2()-> {task3()和task1()并行}-> task2()-> {task3()和task1()并行}-> task2()-> {任务3()和任务1()并行}->任务2()->等。

非常感谢您的帮助,正如我所说,我不想在任何第三方库中都停留在本机C ++ 11中。

最佳答案

天真的方法可能是这样的(仅重复部分):

while (true)
{
    task2();
    std::thread t1(task1), t3(task3);
    t1.join();
    t3.join();
}


每次都可能不值得增加线程。您可能希望使两个线程永久保持活动状态,并将工作项传递给它们。实际上,这是std::async的一种可能的实现,尽管通常您对async安排其工作的方式没有太多控制权:

while (true)
{
    task2();
    auto f1 = std::async(task1), f3(task3);
    f1.get();
    f3.get();
}

10-07 17:13