キャンセル可能なタスクのグループ。
class task_group_context;
#include "tbb/task.h"
task_group_context は、キャンセル可能な、または優先度レベルが設定された、タスクのグループを表します。 すべてのタスクはグループに属します。 タスクは 1 つのグループのメンバーになることができます。
ルートタスクは、task::allocate_root() 呼び出しの task_group_context オブジェクトで渡されるグループと関連しています。 子タスクは、親タスクのグループに自動的に属します。 タスクは、task::change_group() メソッドを使用してほかのグループに移動できます。
task_group_context オブジェクトはツリー形式です。 各ツリーのルートは、task_group_context で isolated として構築されます。
task_group_context は、リクエストにより明示的に、または例外がタスクからスローされたときに暗黙的にキャンセルされます。 task_group_context をキャンセルすると、そのルート以下のツリー全体がキャンセルされます。
グループのすべてのタスクの優先度は、関連付けられている task_group_context オブジェクトから、またはグループに属するすべてのタスクから、いつでも変更できます。 キャンセルと同様に、優先度を変更すると、グループの子タスクの優先度も変更されます。 タスク実行に対する優先度の影響は、「優先度」セクションで説明されています。
task_scheduler_init を暗黙的に作成する各ユーザースレッドには、初期ツリーのルートの役割をする isolated task_group_context が含まれます。 ユーザースレッドがタスクを実行していない場合、このコンテキストは task::self() によって返されるダミータスクと関連しています。
namespace tbb {
class task_group_context {
public:
enum kind_t {
isolated = implementation-defined,
bound = implementation-defined
};
enum traits_type {
exact_exception = implementation-defined,
concurrent_wait = implementation-defined,
#if TBB_USE_CAPTURED_EXCEPTION
default_traits = 0
#else
default_traits = exact_exception
#endif /* !TBB_USE_CAPTURED_EXCEPTION */
};
task_group_context( kind_t relation_with_parent = bound,
uintptr_t traits = default_traits );
~task_group_context();
void reset();
bool cancel_group_execution();
bool is_group_execution_cancelled() const;
void set_priority ( priority_t );
priority_t priority () const;
};
}
| メンバー | 説明 |
|---|---|
| task_group_context( kind_t relation_to_parent=bound, uintptr_t traits=default_traits ) |
空の task_group_context を構築します。 relation_to_parent が bound の場合、task::allocate_root(task_group_context&) の呼び出しで最初に渡されるとき、task_group_context は最も内側で実行するタスクのグループの子になります。 この呼び出しがユーザースレッドから直接行われた場合、relation_to_parent が isolated だった場合と同様の結果になります。 relation_to_parent が isolated の場合、親 task_group_context はありません。 traits 引数は、traits_type 値のビット単位の OR です。 exact_exception フラグは、例外がスレッド間でどの程度正確に転送されるかを制御します。 詳細は、「例外」セクションを参照してください。concurrent_wait フラグは、task::wait_for_all および task::spawn_and_wait_for_all メソッドの参照-カウント動作を制御します。 |
| ~task_group_context() |
空の task_group_context を破棄します。グループにタスクが残っている場合は、プログラマーのミスです。 |
| bool cancel_group_execution() |
キャンセルするグループのタスクをリクエストします。 戻り値: グループがすでにキャンセルされている場合は false。その他の場合は true。 複数のスレッドから同時に呼び出された場合、1 つの呼び出しは true が返され、残りの呼び出しは false が返されます。 |
| bool is_group_execution_cancelled() const |
戻り値: グループがキャンセルのリクエストを受け取った場合は true。 |
| void reset() |
グループの状態をキャンセルされていない状態に初期化しなおします。 警告このメソッドは、グループの下位グループと関連するすべてのタスクが完了した後に呼び出した場合のみ安全です。 このメソッドは、複数のスレッドで同時に呼び出してはなりません。 |
| void set_priority ( priority_t ) |
タスクグループの優先度を変更します。 |
| priority_t priority () const |
戻り値: タスクグループの優先度。 |