# task_group_context

[scheduler.task_group_context]

`task_group_context` represents a set of properties used by task scheduler for execution of the associated tasks. Each task is associated with only one `task_group_context` object.

The `task_group_context` objects form a forest of trees. Each tree’s root is a `task_group_context` constructed as `isolated`.

`task_group_context` is cancelled explicitly by the user request, or implicitly when an exception is thrown out of an associated task. Canceling `task_group_context` causes the entire subtree rooted at it to be cancelled.

The `task_group_context` carries floating point settings inherited from the parent `task_group_context` object or captured with a dedicated interface.

    // Defined in header <oneapi/tbb/task_group.h>

    namespace oneapi {
    namespace tbb {

        class task_group_context {
        public:
            enum kind_t {
                isolated = /* implementation-defined */,
                bound = /* implementation-defined */
            };
            enum traits_type {
                fp_settings = /* implementation-defined */,
                default_traits = 0
            };

            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();
            uintptr_t traits() const;
        };

    } // namespace tbb;
    } // namespace oneapi

## Member types and constants

enum kind_t::isolated

  When passed to the specific constructor, the created `task_group_context` object has no parent.

enum kind_t::bound

  When passed to the specific constructor, the created `task_group_context` object becomes a child of the innermost running task’s group when the first task associated to the `task_group_context` is passed to the task scheduler. If there is no innermost running task on the current thread, the `task_group_context` becomes `isolated`.

enum traits_type::fp_settings

  When passed to the specific constructor, the flag forces the context to capture floating-point settings from the current thread.

## Member functions

task_group_context(kind_t relation_to_parent = bound, uintptr_t traits = default_traits)

  Constructs an empty `task_group_context`.

~task_group_context()

  Destroys an empty task_group_context. The behavior is undefined if there are still extant tasks associated with this `task_group_context`.

bool cancel_group_execution()

  Requests that tasks associated with this `task_group_context` are not executed.

  Returns `false` if this `task_group_context` is already cancelled; `true`, otherwise. If concurrently called by multiple threads, exactly one call returns `true` and the rest return `false`.

bool is_group_execution_cancelled() const

  Returns `true` if this `task_group_context` has received the cancellation request.

void reset()

  Reinitializes this `task_group_context` to the uncancelled state.

  Caution

  This method is only safe to call once all tasks associated with the group’s subordinate groups have completed. This method must not be invoked concurrently by multiple threads.

void capture_fp_settings()

  Captures floating-point settings from the current thread.

  Caution

  This method is only safe to call once all tasks associated with the group’s subordinate groups have completed. This method must not be invoked concurrently by multiple threads.

uintptr_t traits() const

  Returns traits of this `task_group_context`.