task_group::run メソッド

task_group オブジェクトでタスクをスケジュールします。task_handle オブジェクトが run にパラメーターとして渡される場合、task_handle オブジェクトの有効期間は呼び出し元によって管理されます。関数オブジェクトへの参照をパラメーターとして受け取るメソッドのバージョンでは、ランタイム内でのヒープの割り当てが含まれる場合があります。これを、task_handle オブジェクトへの参照を受け取るバージョンと比較した場合、パフォーマンスが低下することがあります。パラメーター _Placement を受け取るバージョンと、そのパラメーターで指定された場所に実装するようにバイアス タスクが発生します。

template<
   typename _Function
>
void run(
   const _Function& _Func
);

template<
   typename _Function
>
void run(
   const _Function& _Func,
   location& _Placement
);

template<
   typename _Function
>
void run(
   task_handle<_Function>& _Task_handle
);

template<
   typename _Function
>
void run(
   task_handle<_Function>& _Task_handle,
   location& _Placement
);

パラメーター

  • _Function
    タスク ハンドルの本体を実行するために呼び出される関数オブジェクトの型。

  • _Func
    タスクの本体を呼び出すために呼び出される関数。ラムダ式、またはシグネチャ void operator()() を持つ関数呼び出し演算子のバージョンをサポートするその他のオブジェクトを使用できます。

  • _Placement
    _Func パラメーターが表すタスクが実行する必要がある場所への参照。

  • _Task_handle
    スケジュールする作業を識別するハンドル。呼び出し元はこのオブジェクトの有効期間を管理します。ランタイムは、引き続き wait メソッドまたは run_and_wait メソッドがこの task_group オブジェクトで呼び出されるまでオブジェクトが持続すると見なします。

解説

ランタイムは指定された処理関数を後から実行するようにスケジュールしますが、これは呼び出し元の関数が戻った後になることがあります。このメソッドでは、task_handle オブジェクトを使用して、指定された処理関数のコピーを保持します。そのため、このメソッドに渡した関数オブジェクトで発生した状態の変化は、その関数オブジェクトのコピーには反映されません。さらに、ポインター渡し、または参照渡しで処理関数に渡した任意のオブジェクトの有効期間は、処理関数が戻るまで有効なままであることに注意してください。

例外からのスタック アンワインドの結果として task_group が破棄される場合は、事前に wait メソッドまたは run_and_wait メソッドの呼び出しが行われたことを保証する必要はありません。その場合、デストラクターは適切に取り消し処理を行い、_Task_handle パラメーターで表されるタスクが完了するのを待ちます。

_Task_handle パラメーターによって指定されたタスク ハンドルが run メソッドを介して既にタスク グループ オブジェクトにスケジュールされていて、このタスク グループで wait メソッドまたは run_and_wait メソッドに対する中間の呼び出しがない場合、このメソッドは invalid_multiple_scheduling 例外をスローします。

必要条件

ヘッダー: ppl.h

名前空間: の同時実行

参照

関連項目

task_group クラス

task_group::wait メソッド

task_group::run_and_wait メソッド

location クラス

概念

タスクの並列化 (同時実行ランタイム)