task_group_context クラス

概要

キャンセル可能なタスクのグループ。

構文

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_contextisolated として構築されます。

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,
            fp_settings     = 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 capture_fp_settings();
        void set_priority( priority_t );
        priority_t priority() const;
        uintptr_t traits() 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_parentisolated の場合、親 task_group_context はありません。

traits 引数は、traits_type 値のビット単位の OR です。exact_exception フラグは、例外がスレッド間でどの程度正確に転送されるかを制御します。詳細は、「例外」セクションを参照してください。concurrent_wait フラグは、task::wait_for_all および task::spawn_and_wait_for_all メソッドの参照-カウント動作を制御します。fp_settings フラグを指定すると、コンテキストは現在のスレッドから浮動小数点設定を取得します。詳細は、「浮動小数点設定」セクションを参照してください。

~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

戻り値: タスクグループの優先度。

void capture_fp_settings()

現在のスレッドから浮動小数点設定を取得します。詳細は、「浮動小数点設定」セクションを参照してください。

注意

このメソッドは、グループの下位グループと関連するすべてのタスクが完了した後に呼び出した場合のみ安全です。このメソッドは、複数のスレッドで同時に呼び出してはなりません。

uintptr_t traits() const

戻り値: タスクグループの特徴。

関連情報