task_group クラス

説明

task_group は、同時に実行するタスクのグループを表します。タスクは実行とともに動的にグループに追加されます。

ラムダ式のサンプル

#include "tbb/task_group.h"
     
    using namespace tbb;
     
    int Fib(int n) {
        if( n<2 ) {
            return n;
        } else {
            int x, y;
            task_group g;
            g.run([&]{x=Fib(n-1);}); // タスクを作成
            g.run([&]{y=Fib(n-2);}); // 別のタスクを作成
            g.wait();                // 両方のタスクが完了するのを待つ
            return x+y;
        }
    }

注意

タスク作成はシリアルのボトルネックとなるため、1 つの task_group で大量のタスクを作成することはスケーラブルではありません。大量の並列タスクを作成する場合は、parallel_forparallel_invoke を代わりに使用するか、タスクを再帰ツリーとして作成する構成を検討してください。

メンバー

namespace tbb {
        class task_group {
        public:
            task_group();
            ~task_group();
     
            template<typename Func>
            void run( const Func& f );
     
            template<typename Func> 
            void run( task_handle<Func>& handle );
     
            template<typename Func>
            void run_and_wait( const Func& f );
     
            template<typename Func> 
            void run_and_wait( task_handle<Func>& handle );
     
            task_group_status wait(); 
            bool is_canceling();
            void cancel();
        }
    }