我使用的是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();
}