C++ 流水线中的任务并行化和数据同步

C++ 流水线中的任务并行化和数据同步,c++,c,multithreading,C++,C,Multithreading,我有5个独立的组件A、B、C、D、E,其中A和B产生数据,C和D同时处理A和B的数据,E将可视化C和D的结果 实现此管道的最简单方法是将它们全部放在一个线程中: while (keep_running) A->B->C->D->E 但C和D可以并行使用以提高效率。组件A和B也可能如此 while (keep_running) {A && B could be in parallel} -> {C && D in pa

我有5个独立的组件A、B、C、D、E,其中A和B产生数据,C和D同时处理A和B的数据,E将可视化C和D的结果

实现此管道的最简单方法是将它们全部放在一个线程中:

while (keep_running)
    A->B->C->D->E
但C和D可以并行使用以提高效率。组件A和B也可能如此

while (keep_running)
    {A && B could be in parallel} -> {C && D in parallel} -> E
我想知道实施这一点的有效方法是什么

谢谢

更新:很抱歉不清楚

让我用一种伪代码的方式来表述我的问题

// keep_running is just a bool, could be updated to terminate the loop 
while (keep_running) 
      run A; // produce data
      run B; // produce data 
      run C; // processing data from A and B 
      run D; // processing data from A and B
      run E; // visualize results from B and C

while (keep_running)
      create_thread ta to run A;
      create thread tb to run B;
      ta.run();
      tb.run();
      join ta and tb;
      create thread tc to C;
      create thread td for D;
      tc.run();
      td.run();
      join tc and td;
      run E; 
      destroy ta,tb,tc,td;

// I think above implementation is not efficient, because create and destroy threads every time
// I wonder if there're some efficient implementation like:
create thread ta,tb,tc,td;
while (keep_running)
      ta.run_once();
      tb.run_once();
      wait ta and tb; // A and B finish a round and go to sleep.
      tc.run_once();
      td.run_once();
      wait tc and td;
      run E;
destroy ta, tb, tc, td

// Or other more efficient way ?
我在线程方面没有太多经验,为这个不清楚的问题道歉,并希望有人能给我一些提示,让我能够解决这个问题


谢谢。

为A和B创建两个线程,在它们后面放置一个屏障,这样您就不会遇到冲突。 为C&D创建两个线程,处理,放置屏障
完成E.L./P>请选择C或C++中的一个。@ MikeCAT为什么?我可以接受C或C++的答案。这只是我,或者问题没有上下文完全不清楚?“杰夫,这里的箭头只是关于执行顺序,而不是数据流。”奥拉夫