task_group

[scheduler.task_group]

task_group は、同時に実行するタスクのグループを表します。タスクは実行とともに動的にグループに追加されます。task_group::wait() を実行するスレッドは、特定の task_group に関連しない他のタスクに参加する可能性があります。


// <oneapi/tbb/task_group.h> ヘッダーで定義 

namespace oneapi { 
namespace tbb { 

    class task_group { 
    public: 
        task_group(); 
        task_group(task_group_context& context); 

        ~task_group(); 

        template<typename Func> 
        void run(Func&& f); 

        template<typename Func> 
        task_handle defer(Func&& f); 

        void run(task_handle&& h); 

        template<typename Func> 
        task_group_status run_and_wait(const Func& f); 

        task_group_status run_and_wait(task_handle&& h); 

        task_group_status wait(); 
        void cancel(); 
    }; 

    bool is_current_task_group_canceling(); 

} // namespace tbb 
} // namespace oneapi

メンバー関数

task_group()

空の task_group を構築。

task_group(task_group_context &context)

空の task_group を構築。task_group に追加されたすべてのタスクは、context に関連付けられます。

~task_group()

task_group を破棄します。

要件: wait メソッドは task_group を破棄する前に呼び出さなければなりません。そうしないとデストラクターが例外をスローします。

template<typename F>
task_handle defer(F &&f)

f() を計算する遅延タスクを作成し、それを指す task_handle を返します。

タスクは、task_group::run メソッドなどを使用して明示的に要求されるまで実行はスケジュールされません。ただし、タスクは task_group に引き続いて追加されるため、task_group::wait メソッドは task_handle がスケジュールされるか破棄されるまで待機します。

F タイプは、[function.objects] ISO C++ 標準の関数オブジェクトの要件を満たしている必要があります。

戻り値: f() を計算するタスクを指す task_handle オブジェクトを返します。

template<typename Func>
void run(Func &&f)

f() を計算するタスクを追加して直ちにリターンします。Func タイプは、[function.objects] ISO C++ 標準の関数オブジェクトの要件を満たしている必要があります。

void run(task_handle &&h)

h で指定されたタスク・オブジェクトの実行をスケジュールします。

次の条件が満たされないと未定義の動作となります。
  • h が空ではない。

  • *this の生成に使用した task_group と同じである。

template<typename Func>
task_group_status run_and_wait(const Func &f)

{run(f); return wait();} と等価です。Func タイプは、[function.objects] ISO C++ 標準の関数オブジェクトの要件を満たしている必要があります。

戻り値: task_group のステータスを返します。task_group_status を参照してください。

task_group_status wait()

グループのすべてのタスクが完了する、またはキャンセルされるのを待ちます。

戻り値: task_group のステータスを返します。task_group_status を参照してください。

void cancel()

この task_group のすべてのタスクをキャンセルします。

非メンバー関数

bool is_current_task_group_canceling()

このスレッドの最も内側の task_group がタスクをキャンセルしている場合は true を返します。