C++ 流水线中的任务并行化和数据同步
我有5个独立的组件A、B、C、D、E,其中A和B产生数据,C和D同时处理A和B的数据,E将可视化C和D的结果 实现此管道的最简单方法是将它们全部放在一个线程中: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
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++的答案。这只是我,或者问题没有上下文完全不清楚?“杰夫,这里的箭头只是关于执行顺序,而不是数据流。”奥拉夫