3

のようなものを持ちたいのですtbb::task_groupが、注文の実行が保証されているという違いがあります。

serial_task_group tasks;

tasks.run([]{std::cout << 1;});
tasks.run([]{std::cout << 2;});
tasks.run([]{std::cout << 3;});
tasks.wait();

// guaranteed output: 123

tbb を使用してこれを達成する方法について何か提案はありますか?

現在、条件変数を使用してキューから実行する明示的なスレッドがあります。ただし、キューを使用する際の問題は、task_group でアクティブなタスクが 1 つだけであることを保証する方法です。

4

1 に答える 1

7

(開示: 私は Intel で Intel Threading Building Blocks に取り組んでいます。)

別の回答で提案されているように、フロー グラフを使用してこのようなことを行うことができます。フロー グラフを使用した例のコードは次のようになります。

#include "tbb/flow_graph.h"
#include <iostream>

using namespace tbb::flow;

int main( int argc, char *argv[] ) {
    graph g;
    continue_node< continue_msg > n1( g, []( const continue_msg & ) { std::cout << "1"; } );
    continue_node< continue_msg > n2( g, []( const continue_msg & ) { std::cout << "2"; } );
    continue_node< continue_msg > n3( g, []( const continue_msg & ) { std::cout << "3"; } );
    make_edge( n1, n2 );
    make_edge( n2, n3 );
    n1.try_put( continue_msg() );
    g.wait_for_all();
   return 0;
}
于 2012-12-21T15:41:14.873 に答える