Intel(R) Threading Building Blocks Doxygen Documentation  version 4.2.3
tbb::task Class Referenceabstract

Base class for user-defined tasks. More...

#include <task.h>

Inheritance diagram for tbb::task:
Collaboration diagram for tbb::task:

Public Types

enum  state_type {
  executing, reexecute, ready, allocated,
  freed, recycle
}
 Enumeration of task states that the scheduler considers. More...
 
typedef internal::affinity_id affinity_id
 An id as used for specifying affinity. More...
 

Public Member Functions

virtual ~task ()
 Destructor. More...
 
virtual taskexecute ()=0
 Should be overridden by derived classes. More...
 
internal::allocate_continuation_proxy & allocate_continuation ()
 Returns proxy for overloaded new that allocates a continuation task of *this. More...
 
internal::allocate_child_proxy & allocate_child ()
 Returns proxy for overloaded new that allocates a child task of *this. More...
 
void recycle_as_continuation ()
 Change this to be a continuation of its former self. More...
 
void recycle_as_safe_continuation ()
 Recommended to use, safe variant of recycle_as_continuation. More...
 
void recycle_as_child_of (task &new_parent)
 Change this to be a child of new_parent. More...
 
void recycle_to_reexecute ()
 Schedule this for reexecution after current execute() returns. More...
 
void set_ref_count (int count)
 Set reference count. More...
 
void increment_ref_count ()
 Atomically increment reference count. More...
 
int add_ref_count (int count)
 Atomically adds to reference count and returns its new value. More...
 
int decrement_ref_count ()
 Atomically decrement reference count and returns its new value. More...
 
void spawn_and_wait_for_all (task &child)
 Similar to spawn followed by wait_for_all, but more efficient. More...
 
void __TBB_EXPORTED_METHOD spawn_and_wait_for_all (task_list &list)
 Similar to spawn followed by wait_for_all, but more efficient. More...
 
void wait_for_all ()
 Wait for reference count to become one, and set reference count to zero. More...
 
taskparent () const
 task on whose behalf this task is working, or NULL if this is a root. More...
 
void set_parent (task *p)
 sets parent task pointer to specified value More...
 
task_group_contextcontext ()
 This method is deprecated and will be removed in the future. More...
 
task_group_contextgroup ()
 Pointer to the task group descriptor. More...
 
bool is_stolen_task () const
 True if task was stolen from the task pool of another thread. More...
 
state_type state () const
 Current execution state. More...
 
int ref_count () const
 The internal reference count. More...
 
bool __TBB_EXPORTED_METHOD is_owned_by_current_thread () const
 Obsolete, and only retained for the sake of backward compatibility. Always returns true. More...
 
void set_affinity (affinity_id id)
 Set affinity for this task. More...
 
affinity_id affinity () const
 Current affinity of this task. More...
 
virtual void __TBB_EXPORTED_METHOD note_affinity (affinity_id id)
 Invoked by scheduler to notify task that it ran on unexpected thread. More...
 
void __TBB_EXPORTED_METHOD change_group (task_group_context &ctx)
 Moves this task from its current group into another one. More...
 
bool cancel_group_execution ()
 Initiates cancellation of all tasks in this cancellation group and its subordinate groups. More...
 
bool is_cancelled () const
 Returns true if the context has received cancellation request. More...
 
void set_group_priority (priority_t p)
 Changes priority of the task group this task belongs to. More...
 
priority_t group_priority () const
 Retrieves current priority of the task group this task belongs to. More...
 

Static Public Member Functions

static internal::allocate_root_proxy allocate_root ()
 Returns proxy for overloaded new that allocates a root task. More...
 
static internal::allocate_root_with_context_proxy allocate_root (task_group_context &ctx)
 Returns proxy for overloaded new that allocates a root task associated with user supplied context. More...
 
static void spawn_root_and_wait (task &root)
 Spawn task allocated by allocate_root, wait for it to complete, and deallocate it. More...
 
static void spawn_root_and_wait (task_list &root_list)
 Spawn root tasks on list and wait for all of them to finish. More...
 
static void enqueue (task &t)
 Enqueue task for starvation-resistant execution. More...
 
static void enqueue (task &t, priority_t p)
 Enqueue task for starvation-resistant execution on the specified priority level. More...
 
static task &__TBB_EXPORTED_FUNC self ()
 The innermost task being executed or destroyed by the current thread at the moment. More...
 

Protected Member Functions

 task ()
 Default constructor. More...
 

Private Member Functions

void __TBB_EXPORTED_METHOD internal_set_ref_count (int count)
 Set reference count. More...
 
internal::reference_count __TBB_EXPORTED_METHOD internal_decrement_ref_count ()
 Decrement reference count and return its new value. More...
 
internal::task_prefix & prefix (internal::version_tag *=NULL) const
 Get reference to corresponding task_prefix. More...
 

Friends

class interface5::internal::task_base
 
class task_list
 
class internal::scheduler
 
class internal::allocate_root_proxy
 
class internal::allocate_root_with_context_proxy
 
class internal::allocate_continuation_proxy
 
class internal::allocate_child_proxy
 
class internal::allocate_additional_child_of_proxy
 
void internal::make_critical (task &)
 
bool internal::is_critical (task &)
 

Detailed Description

Base class for user-defined tasks.

Definition at line 592 of file task.h.

Member Typedef Documentation

◆ affinity_id

typedef internal::affinity_id tbb::task::affinity_id

An id as used for specifying affinity.

Guaranteed to be integral type. Value of 0 means no affinity.

Definition at line 879 of file task.h.

Member Enumeration Documentation

◆ state_type

Enumeration of task states that the scheduler considers.

Enumerator
executing 

task is running, and will be destroyed after method execute() completes.

reexecute 

task to be rescheduled.

ready 

task is in ready pool, or is going to be put there, or was just taken off.

allocated 

task object is freshly allocated or recycled.

freed 

task object is on free list, or is going to be put there, or was just taken off.

recycle 

task to be recycled as continuation

Definition at line 612 of file task.h.

612  {
614  executing,
616  reexecute,
618  ready,
620  allocated,
622  freed,
624  recycle
625 #if __TBB_RECYCLE_TO_ENQUEUE
626  ,to_enqueue
628 #endif
629  };
task object is freshly allocated or recycled.
Definition: task.h:620
task is running, and will be destroyed after method execute() completes.
Definition: task.h:614
task to be recycled as continuation
Definition: task.h:624
task is in ready pool, or is going to be put there, or was just taken off.
Definition: task.h:618
task object is on free list, or is going to be put there, or was just taken off.
Definition: task.h:622
task to be rescheduled.
Definition: task.h:616

Constructor & Destructor Documentation

◆ task()

tbb::task::task ( )
inlineprotected

Default constructor.

Definition at line 602 of file task.h.

602 {prefix().extra_state=1;}
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
Definition: task.h:941

References prefix().

Here is the call graph for this function:

◆ ~task()

virtual tbb::task::~task ( )
inlinevirtual

Destructor.

Definition at line 606 of file task.h.

606 {}

Referenced by tbb::interface5::internal::task_base::destroy().

Here is the caller graph for this function:

Member Function Documentation

◆ add_ref_count()

int tbb::task::add_ref_count ( int  count)
inline

Atomically adds to reference count and returns its new value.

Has release-acquire semantics

Definition at line 750 of file task.h.

750  {
752  internal::reference_count k = count+__TBB_FetchAndAddW( &prefix().ref_count, count );
753  __TBB_ASSERT( k>=0, "task's reference count underflowed" );
754  if( k==0 )
756  return int(k);
757  }
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t count
void call_itt_notify(notify_type, void *)
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type size_t void ITT_FORMAT p const __itt_domain __itt_id __itt_string_handle const wchar_t size_t ITT_FORMAT lu const __itt_domain __itt_id __itt_relation __itt_id ITT_FORMAT p const wchar_t int ITT_FORMAT __itt_group_mark d int
intptr_t reference_count
A reference count.
Definition: task.h:121
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
Definition: task.h:941
int ref_count() const
The internal reference count.
Definition: task.h:862

References __TBB_ASSERT, tbb::internal::acquired, tbb::internal::call_itt_notify(), count, int, prefix(), ref_count(), and tbb::internal::releasing.

Here is the call graph for this function:

◆ affinity()

affinity_id tbb::task::affinity ( ) const
inline

Current affinity of this task.

Definition at line 885 of file task.h.

885 {return prefix().affinity;}
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
Definition: task.h:941

References prefix().

Here is the call graph for this function:

◆ allocate_child()

◆ allocate_continuation()

internal::allocate_continuation_proxy& tbb::task::allocate_continuation ( )
inline

Returns proxy for overloaded new that allocates a continuation task of *this.

The continuation's parent becomes the parent of *this.

Definition at line 649 of file task.h.

649  {
650  return *reinterpret_cast<internal::allocate_continuation_proxy*>(this);
651  }

References internal::allocate_continuation_proxy.

Referenced by tbb::interface9::internal::allocate_sibling(), tbb::interface9::internal::do_task_iter< Iterator, Body, Item >::run_for_random_access_iterator(), and tbb::flow::interface10::internal::spawn_in_graph_arena().

Here is the caller graph for this function:

◆ allocate_root() [1/2]

◆ allocate_root() [2/2]

static internal::allocate_root_with_context_proxy tbb::task::allocate_root ( task_group_context ctx)
inlinestatic

Returns proxy for overloaded new that allocates a root task associated with user supplied context.

Definition at line 642 of file task.h.

642  {
644  }
friend class internal::allocate_root_with_context_proxy
Definition: task.h:933

◆ cancel_group_execution()

bool tbb::task::cancel_group_execution ( )
inline

Initiates cancellation of all tasks in this cancellation group and its subordinate groups.

Returns
false if cancellation has already been requested, true otherwise.

Definition at line 910 of file task.h.

910 { return prefix().context->cancel_group_execution(); }
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
Definition: task.h:941

References prefix().

Referenced by tbb::interface9::internal::quick_sort_pretest_body< RandomAccessIterator, Compare >::operator()().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ change_group()

void __TBB_EXPORTED_METHOD tbb::task::change_group ( task_group_context ctx)

Moves this task from its current group into another one.

Argument ctx specifies the new group.

The primary purpose of this method is to associate unique task group context with a task allocated for subsequent enqueuing. In contrast to spawned tasks enqueued ones normally outlive the scope where they were created. This makes traditional usage model where task group context are allocated locally on the stack inapplicable. Dynamic allocation of context objects is performance inefficient. Method change_group() allows to make task group context object a member of the task class, and then associate it with its containing task object in the latter's constructor.

◆ context()

task_group_context* tbb::task::context ( )
inline

This method is deprecated and will be removed in the future.

Use method group() instead.

Definition at line 843 of file task.h.

843 {return prefix().context;}
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
Definition: task.h:941

References prefix().

Referenced by tbb::internal::generic_scheduler::prepare_for_spawning(), tbb::interface9::internal::start_for< Range, Body, Partitioner >::run(), and set_parent().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ decrement_ref_count()

int tbb::task::decrement_ref_count ( )
inline

Atomically decrement reference count and returns its new value.

Has release semantics.

Definition at line 761 of file task.h.

761  {
762 #if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
764 #else
766 #endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */
767  }
#define __TBB_FetchAndDecrementWrelease(P)
Definition: tbb_machine.h:315
internal::reference_count __TBB_EXPORTED_METHOD internal_decrement_ref_count()
Decrement reference count and return its new value.
Definition: task.cpp:196
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type size_t void ITT_FORMAT p const __itt_domain __itt_id __itt_string_handle const wchar_t size_t ITT_FORMAT lu const __itt_domain __itt_id __itt_relation __itt_id ITT_FORMAT p const wchar_t int ITT_FORMAT __itt_group_mark d int
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
Definition: task.h:941
int ref_count() const
The internal reference count.
Definition: task.h:862

References __TBB_FetchAndDecrementWrelease, int, internal_decrement_ref_count(), prefix(), and ref_count().

Referenced by tbb::internal::task_group_base::ref_count_guard::~ref_count_guard().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ enqueue() [1/2]

static void tbb::task::enqueue ( task t)
inlinestatic

Enqueue task for starvation-resistant execution.

The task will be enqueued on the normal priority level disregarding the priority of its task group.

The rationale of such semantics is that priority of an enqueued task is statically fixed at the moment of its enqueuing, while task group priority is dynamic. Thus automatic priority inheritance would be generally a subject to the race, which may result in unexpected behavior.

Use enqueue() overload with explicit priority value and task::group_priority() method to implement such priority inheritance when it is really necessary.

Definition at line 809 of file task.h.

809  {
810  t.prefix().owner->enqueue( t, NULL );
811  }

References prefix().

Here is the call graph for this function:

◆ enqueue() [2/2]

static void tbb::task::enqueue ( task t,
priority_t  p 
)
inlinestatic

Enqueue task for starvation-resistant execution on the specified priority level.

Definition at line 815 of file task.h.

815  {
816 #if __TBB_PREVIEW_CRITICAL_TASKS
818  || p == internal::priority_critical, "Invalid priority level value");
819 #else
820  __TBB_ASSERT(p == priority_low || p == priority_normal || p == priority_high, "Invalid priority level value");
821 #endif
822  t.prefix().owner->enqueue( t, (void*)p );
823  }
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169
void const char const char int ITT_FORMAT __itt_group_sync p
static const int priority_critical
Definition: task.h:291

◆ execute()

virtual task* tbb::task::execute ( )
pure virtual

Should be overridden by derived classes.

Implemented in tbb::flow::interface10a::overwrite_node< T >::register_predecessor_task, tbb::internal::function_task< F >, tbb::interface7::internal::wait_task, tbb::empty_task, tbb::interface7::internal::delegated_task, tbb::internal::pipeline_root_task, tbb::flow::interface10::internal::source_task_bypass< NodeType >, tbb::interface9::internal::do_task_iter< Iterator, Body, Item >, tbb::flow::interface10::internal::apply_body_task_bypass< NodeType, Input >, tbb::flow::interface10::internal::forward_task_bypass< NodeType >, tbb::internal::stage_task, tbb::interface9::internal::do_group_task_input< Body, Item >, tbb::interface9::internal::start_deterministic_reduce< Range, Body, Partitioner >, tbb::interface9::internal::do_group_task_forward< Iterator, Body, Item >, tbb::flow::interface10::graph::run_and_put_task< Receiver, Body >, tbb::flow::interface10::graph::run_task< Body >, tbb::interface9::internal::finish_deterministic_reduce< Body >, tbb::internal::start_scan< Range, Body, Partitioner >, tbb::flow::interface10::internal::priority_task_selector, tbb::internal::finish_scan< Range, Body >, tbb::interface9::internal::do_iteration_task_iter< Iterator, Body, Item >, tbb::interface9::internal::flag_task, tbb::internal::sum_node< Range, Body >, tbb::interface9::internal::do_iteration_task< Body, Item >, tbb::interface9::internal::start_reduce< Range, Body, Partitioner >, tbb::internal::while_task< Stream, Body >, tbb::internal::task_handle_task< F >, tbb::internal::final_sum< Range, Body >, tbb::internal::spawner< N, function1, function2, function3 >, tbb::interface9::internal::finish_reduce< Body >, tbb::internal::while_group_task< Body >, tbb::internal::function_invoker< function >, tbb::interface9::internal::start_for< Range, Body, Partitioner >, and tbb::internal::while_iteration_task< Body >.

Referenced by tbb::interface9::internal::start_for< Range, Body, Partitioner >::execute(), tbb::flow::interface10::internal::priority_task_selector::execute(), tbb::interface9::internal::start_deterministic_reduce< Range, Body, Partitioner >::execute(), and tbb::internal::custom_scheduler< SchedulerTraits >::local_wait_for_all().

Here is the caller graph for this function:

◆ group()

task_group_context* tbb::task::group ( )
inline

Pointer to the task group descriptor.

Definition at line 846 of file task.h.

846 { return prefix().context; }
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
Definition: task.h:941

References prefix().

Here is the call graph for this function:

◆ group_priority()

priority_t tbb::task::group_priority ( ) const
inline

Retrieves current priority of the task group this task belongs to.

Definition at line 923 of file task.h.

923 { return prefix().context->priority(); }
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
Definition: task.h:941

References prefix().

Here is the call graph for this function:

◆ increment_ref_count()

void tbb::task::increment_ref_count ( )
inline

Atomically increment reference count.

Has acquire semantics

Definition at line 744 of file task.h.

744  {
746  }
#define __TBB_FetchAndIncrementWacquire(P)
Definition: tbb_machine.h:314
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
Definition: task.h:941
int ref_count() const
The internal reference count.
Definition: task.h:862

References __TBB_FetchAndIncrementWacquire, prefix(), and ref_count().

Referenced by tbb::internal::allocate_additional_child_of_proxy::allocate(), tbb::flow::interface10::internal::key_matching_port< TraitsType >::key_matching_port(), and tbb::internal::task_group_base::ref_count_guard::ref_count_guard().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ internal_decrement_ref_count()

internal::reference_count tbb::task::internal_decrement_ref_count ( )
private

Decrement reference count and return its new value.

Definition at line 196 of file task.cpp.

196  {
199  __TBB_ASSERT( k>=1, "task's reference count underflowed" );
200  if( k==1 )
201  ITT_NOTIFY( sync_acquired, &prefix().ref_count );
202  return k-1;
203 }
#define __TBB_FetchAndDecrementWrelease(P)
Definition: tbb_machine.h:315
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p sync_releasing
#define ITT_NOTIFY(name, obj)
Definition: itt_notify.h:120
intptr_t reference_count
A reference count.
Definition: task.h:121
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
Definition: task.h:941
int ref_count() const
The internal reference count.
Definition: task.h:862

References __TBB_ASSERT, __TBB_FetchAndDecrementWrelease, ITT_NOTIFY, and sync_releasing.

Referenced by decrement_ref_count(), and tbb::internal::allocate_additional_child_of_proxy::free().

Here is the caller graph for this function:

◆ internal_set_ref_count()

void tbb::task::internal_set_ref_count ( int  count)
private

Set reference count.

Definition at line 187 of file task.cpp.

187  {
188  __TBB_ASSERT( count>=0, "count must not be negative" );
189  task_prefix &p = prefix();
190  __TBB_ASSERT(p.ref_count==1 && p.state==allocated && self().parent()==this
191  || !(p.extra_state & es_ref_count_active), "ref_count race detected");
192  ITT_NOTIFY(sync_releasing, &p.ref_count);
193  p.ref_count = count;
194 }
Memory prefix to a task object.
Definition: task.h:188
Set if ref_count might be changed by another thread. Used for debugging.
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169
task object is freshly allocated or recycled.
Definition: task.h:620
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t count
void const char const char int ITT_FORMAT __itt_group_sync p
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p sync_releasing
#define ITT_NOTIFY(name, obj)
Definition: itt_notify.h:120
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
Definition: task.h:941

References __TBB_ASSERT, count, tbb::internal::es_ref_count_active, ITT_NOTIFY, p, and sync_releasing.

Referenced by set_ref_count().

Here is the caller graph for this function:

◆ is_cancelled()

bool tbb::task::is_cancelled ( ) const
inline

Returns true if the context has received cancellation request.

Definition at line 913 of file task.h.

913 { return prefix().context->is_group_execution_cancelled(); }
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
Definition: task.h:941

References prefix().

Referenced by tbb::is_current_task_group_canceling(), tbb::interface9::internal::quick_sort_pretest_body< RandomAccessIterator, Compare >::operator()(), and tbb::internal::pipeline_cleaner::~pipeline_cleaner().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_owned_by_current_thread()

bool tbb::task::is_owned_by_current_thread ( ) const

Obsolete, and only retained for the sake of backward compatibility. Always returns true.

Definition at line 212 of file task.cpp.

212  {
213  return true;
214 }

◆ is_stolen_task()

bool tbb::task::is_stolen_task ( ) const
inline

True if task was stolen from the task pool of another thread.

Definition at line 850 of file task.h.

850  {
851  return (prefix().extra_state & 0x80)!=0;
852  }
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
Definition: task.h:941

References prefix().

Referenced by tbb::interface9::internal::dynamic_grainsize_mode< linear_affinity_mode< affinity_partition_type > >::check_being_stolen(), and tbb::interface9::internal::old_auto_partition_type::should_execute_range().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ note_affinity()

void tbb::task::note_affinity ( affinity_id  id)
virtual

Invoked by scheduler to notify task that it ran on unexpected thread.

Invoked before method execute() runs, if task is stolen, or task has affinity but will be executed on another thread.

The default action does nothing.

Defined out of line so that compiler does not replicate task's vtable. It's pointless to define it inline anyway, because all call sites to it are virtual calls that the compiler is unlikely to optimize.

Reimplemented in tbb::interface9::internal::start_reduce< Range, Body, Partitioner >, and tbb::interface9::internal::start_for< Range, Body, Partitioner >.

Definition at line 249 of file task.cpp.

249  {
250 }

Referenced by tbb::internal::generic_scheduler::get_task(), and tbb::internal::generic_scheduler::steal_task().

Here is the caller graph for this function:

◆ parent()

◆ prefix()

internal::task_prefix& tbb::task::prefix ( internal::version_tag = NULL) const
inlineprivate

Get reference to corresponding task_prefix.

Version tag prevents loader on Linux from using the wrong symbol in debug builds.

Definition at line 941 of file task.h.

941  {
942  return reinterpret_cast<internal::task_prefix*>(const_cast<task*>(this))[-1];
943  }

Referenced by add_ref_count(), affinity(), tbb::internal::allocate_additional_child_of_proxy::allocate(), tbb::internal::allocate_continuation_proxy::allocate(), tbb::internal::allocate_child_proxy::allocate(), tbb::internal::generic_scheduler::allocate_task(), tbb::internal::generic_scheduler::attach_arena(), cancel_group_execution(), context(), tbb::internal::generic_scheduler::create_master(), tbb::internal::generic_scheduler::deallocate_task(), decrement_ref_count(), tbb::interface5::internal::task_base::destroy(), enqueue(), tbb::internal::arena::enqueue_task(), tbb::interface7::internal::delegated_task::execute(), tbb::internal::task_proxy::extract_task(), tbb::internal::generic_scheduler::free_nonlocal_small_task(), tbb::internal::generic_scheduler::free_scheduler(), tbb::internal::generic_scheduler::free_task(), tbb::internal::generic_scheduler::generic_scheduler(), tbb::internal::generic_scheduler::get_task(), group(), group_priority(), increment_ref_count(), tbb::interface7::internal::task_arena_base::internal_enqueue(), is_cancelled(), tbb::internal::is_critical(), tbb::internal::generic_scheduler::is_proxy(), is_stolen_task(), tbb::internal::generic_scheduler::is_version_3_task(), tbb::internal::generic_scheduler::local_spawn(), tbb::internal::generic_scheduler::local_spawn_root_and_wait(), tbb::internal::custom_scheduler< SchedulerTraits >::local_wait_for_all(), tbb::internal::task_stream< num_priority_levels >::look_specific(), tbb::internal::make_critical(), tbb::internal::nested_arena_context::mimic_outermost_level(), parent(), tbb::internal::auto_empty_task::prefix(), tbb::internal::generic_scheduler::prepare_for_spawning(), tbb::task_list::push_back(), recycle_as_child_of(), recycle_as_continuation(), recycle_as_safe_continuation(), recycle_to_reexecute(), ref_count(), tbb::internal::reset_extra_state(), set_affinity(), set_parent(), set_ref_count(), tbb::interface5::internal::task_base::spawn(), spawn_and_wait_for_all(), spawn_root_and_wait(), state(), tbb::internal::generic_scheduler::steal_task(), tbb::internal::generic_scheduler::steal_task_from(), tbb::internal::custom_scheduler< SchedulerTraits >::tally_completion_of_predecessor(), task(), wait_for_all(), tbb::internal::generic_scheduler::wait_until_empty(), tbb::interface7::internal::delegated_task::~delegated_task(), and tbb::internal::nested_arena_context::~nested_arena_context().

Here is the caller graph for this function:

◆ recycle_as_child_of()

void tbb::task::recycle_as_child_of ( task new_parent)
inline

Change this to be a child of new_parent.

Definition at line 698 of file task.h.

698  {
699  internal::task_prefix& p = prefix();
700  __TBB_ASSERT( prefix().state==executing||prefix().state==allocated, "execute not running, or already recycled" );
701  __TBB_ASSERT( prefix().ref_count==0, "no child tasks allowed when recycled as a child" );
702  __TBB_ASSERT( p.parent==NULL, "parent must be null" );
703  __TBB_ASSERT( new_parent.prefix().state<=recycle, "corrupt parent's state" );
704  __TBB_ASSERT( new_parent.prefix().state!=freed, "parent already freed" );
705  p.state = allocated;
706  p.parent = &new_parent;
707 #if __TBB_TASK_GROUP_CONTEXT
708  p.context = new_parent.prefix().context;
709 #endif /* __TBB_TASK_GROUP_CONTEXT */
710  }
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169
task object is freshly allocated or recycled.
Definition: task.h:620
task is running, and will be destroyed after method execute() completes.
Definition: task.h:614
void const char const char int ITT_FORMAT __itt_group_sync p
task to be recycled as continuation
Definition: task.h:624
task object is on free list, or is going to be put there, or was just taken off.
Definition: task.h:622
state_type state() const
Current execution state.
Definition: task.h:859
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
Definition: task.h:941
int ref_count() const
The internal reference count.
Definition: task.h:862

References __TBB_ASSERT, allocated, executing, freed, p, prefix(), recycle, ref_count(), and state().

Referenced by tbb::internal::sum_node< Range, Body >::create_child(), and tbb::interface9::internal::do_task_iter< Iterator, Body, Item >::run_for_random_access_iterator().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ recycle_as_continuation()

void tbb::task::recycle_as_continuation ( )
inline

Change this to be a continuation of its former self.

The caller must guarantee that the task's refcount does not become zero until after the method execute() returns. Typically, this is done by having method execute() return a pointer to a child of the task. If the guarantee cannot be made, use method recycle_as_safe_continuation instead.

Because of the hazard, this method may be deprecated in the future.

Definition at line 684 of file task.h.

684  {
685  __TBB_ASSERT( prefix().state==executing, "execute not running?" );
686  prefix().state = allocated;
687  }
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169
task object is freshly allocated or recycled.
Definition: task.h:620
task is running, and will be destroyed after method execute() completes.
Definition: task.h:614
state_type state() const
Current execution state.
Definition: task.h:859
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
Definition: task.h:941

References __TBB_ASSERT, allocated, executing, prefix(), and state().

Referenced by tbb::internal::sum_node< Range, Body >::execute(), tbb::internal::stage_task::execute(), and tbb::internal::pipeline_root_task::execute().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ recycle_as_safe_continuation()

void tbb::task::recycle_as_safe_continuation ( )
inline

Recommended to use, safe variant of recycle_as_continuation.

For safety, it requires additional increment of ref_count. With no descendants and ref_count of 1, it has the semantics of recycle_to_reexecute.

Definition at line 692 of file task.h.

692  {
693  __TBB_ASSERT( prefix().state==executing, "execute not running?" );
694  prefix().state = recycle;
695  }
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169
task is running, and will be destroyed after method execute() completes.
Definition: task.h:614
task to be recycled as continuation
Definition: task.h:624
state_type state() const
Current execution state.
Definition: task.h:859
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
Definition: task.h:941

References __TBB_ASSERT, executing, prefix(), recycle, and state().

Referenced by tbb::internal::spawner< N, function1, function2, function3 >::execute().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ recycle_to_reexecute()

void tbb::task::recycle_to_reexecute ( )
inline

Schedule this for reexecution after current execute() returns.

Made obsolete by recycle_as_safe_continuation; may become deprecated.

Definition at line 714 of file task.h.

714  {
715  __TBB_ASSERT( prefix().state==executing, "execute not running, or already recycled" );
716  __TBB_ASSERT( prefix().ref_count==0, "no child tasks allowed when recycled for reexecution" );
717  prefix().state = reexecute;
718  }
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169
task is running, and will be destroyed after method execute() completes.
Definition: task.h:614
state_type state() const
Current execution state.
Definition: task.h:859
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
Definition: task.h:941
task to be rescheduled.
Definition: task.h:616
int ref_count() const
The internal reference count.
Definition: task.h:862

References __TBB_ASSERT, executing, prefix(), reexecute, ref_count(), and state().

Referenced by tbb::internal::while_task< Stream, Body >::execute(), tbb::interface9::internal::do_task_iter< Iterator, Body, Item >::run_for_forward_iterator(), and tbb::interface9::internal::do_task_iter< Iterator, Body, Item >::run_for_input_iterator().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ref_count()

int tbb::task::ref_count ( ) const
inline

The internal reference count.

Definition at line 862 of file task.h.

862  {
863 #if TBB_USE_ASSERT
864  internal::reference_count ref_count_ = prefix().ref_count;
865  __TBB_ASSERT( ref_count_==int(ref_count_), "integer overflow error");
866 #endif
867  return int(prefix().ref_count);
868  }
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type size_t void ITT_FORMAT p const __itt_domain __itt_id __itt_string_handle const wchar_t size_t ITT_FORMAT lu const __itt_domain __itt_id __itt_relation __itt_id ITT_FORMAT p const wchar_t int ITT_FORMAT __itt_group_mark d int
intptr_t reference_count
A reference count.
Definition: task.h:121
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
Definition: task.h:941
int ref_count() const
The internal reference count.
Definition: task.h:862

References __TBB_ASSERT, int, and prefix().

Referenced by add_ref_count(), tbb::interface9::internal::dynamic_grainsize_mode< linear_affinity_mode< affinity_partition_type > >::check_being_stolen(), decrement_ref_count(), tbb::internal::finish_scan< Range, Body >::execute(), increment_ref_count(), recycle_as_child_of(), recycle_to_reexecute(), tbb::interface7::internal::delegated_task::~delegated_task(), and tbb::internal::task_group_base::~task_group_base().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ self()

task & tbb::task::self ( )
static

The innermost task being executed or destroyed by the current thread at the moment.

Definition at line 205 of file task.cpp.

205  {
209  return *v->my_innermost_running_task;
210 }
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169
Work stealing task scheduler.
Definition: scheduler.h:124
task * my_innermost_running_task
Innermost task whose task::execute() is running. A dummy task on the outermost level.
Definition: scheduler.h:81
static generic_scheduler * local_scheduler_weak()
Definition: governor.h:131

References __TBB_ASSERT, tbb::internal::generic_scheduler::assert_task_pool_valid(), tbb::internal::governor::local_scheduler_weak(), and tbb::internal::scheduler_state::my_innermost_running_task.

Referenced by tbb::parallel_while< Body >::add(), tbb::is_current_task_group_canceling(), and tbb::interface9::internal::quick_sort_pretest_body< RandomAccessIterator, Compare >::operator()().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ set_affinity()

void tbb::task::set_affinity ( affinity_id  id)
inline

Set affinity for this task.

Definition at line 882 of file task.h.

882 {prefix().affinity = id;}
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id id
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
Definition: task.h:941

References id, and prefix().

Referenced by tbb::interface9::internal::linear_affinity_mode< static_partition_type >::set_affinity(), and tbb::interface9::internal::affinity_partition_type::set_affinity().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ set_group_priority()

void tbb::task::set_group_priority ( priority_t  p)
inline

Changes priority of the task group this task belongs to.

Definition at line 920 of file task.h.

920 { prefix().context->set_priority(p); }
void const char const char int ITT_FORMAT __itt_group_sync p
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
Definition: task.h:941

◆ set_parent()

void tbb::task::set_parent ( task p)
inline

sets parent task pointer to specified value

Definition at line 833 of file task.h.

833  {
834 #if __TBB_TASK_GROUP_CONTEXT
835  __TBB_ASSERT(!p || prefix().context == p->prefix().context, "The tasks must be in the same context");
836 #endif
837  prefix().parent = p;
838  }
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:169
void const char const char int ITT_FORMAT __itt_group_sync p
task_group_context * context()
This method is deprecated and will be removed in the future.
Definition: task.h:843
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
Definition: task.h:941

References __TBB_ASSERT, context(), p, and prefix().

Referenced by tbb::interface9::internal::allocate_sibling().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ set_ref_count()

void tbb::task::set_ref_count ( int  count)
inline

Set reference count.

Definition at line 734 of file task.h.

734  {
735 #if TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT
737 #else
738  prefix().ref_count = count;
739 #endif /* TBB_USE_THREADING_TOOLS||TBB_USE_ASSERT */
740  }
void __TBB_EXPORTED_METHOD internal_set_ref_count(int count)
Set reference count.
Definition: task.cpp:187
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t count
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
Definition: task.h:941

References count, internal_set_ref_count(), and prefix().

Referenced by tbb::interface9::internal::allocate_sibling(), tbb::internal::while_group_task< Body >::execute(), tbb::internal::spawner< N, function1, function2, function3 >::execute(), tbb::internal::sum_node< Range, Body >::execute(), tbb::interface9::internal::do_group_task_forward< Iterator, Body, Item >::execute(), tbb::interface9::internal::do_group_task_input< Body, Item >::execute(), tbb::internal::pipeline_root_task::execute(), tbb::internal::parallel_invoke_helper::parallel_invoke_helper(), tbb::parallel_while< Body >::run(), tbb::interface9::internal::do_task_iter< Iterator, Body, Item >::run_for_random_access_iterator(), tbb::internal::task_group_base::task_group_base(), tbb::structured_task_group::wait(), tbb::flow::interface10::graph::wait_for_all(), and tbb::flow::interface10::graph::~graph().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ spawn_and_wait_for_all() [1/2]

void tbb::task::spawn_and_wait_for_all ( task child)
inline

Similar to spawn followed by wait_for_all, but more efficient.

Definition at line 773 of file task.h.

773  {
774  prefix().owner->wait_for_all( *this, &child );
775  }
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
Definition: task.h:941

References prefix().

Referenced by tbb::internal::while_group_task< Body >::execute(), tbb::interface9::internal::do_group_task_forward< Iterator, Body, Item >::execute(), tbb::interface9::internal::do_group_task_input< Body, Item >::execute(), tbb::parallel_while< Body >::run(), tbb::internal::parallel_invoke_helper::run_and_finish(), and tbb::interface9::internal::do_task_iter< Iterator, Body, Item >::run_for_random_access_iterator().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ spawn_and_wait_for_all() [2/2]

void tbb::task::spawn_and_wait_for_all ( task_list list)

Similar to spawn followed by wait_for_all, but more efficient.

Definition at line 235 of file task.cpp.

235  {
237  task* t = list.first;
238  if( t ) {
239  if( &t->prefix().next!=list.next_ptr )
240  s->local_spawn( t->prefix().next, *list.next_ptr );
241  list.clear();
242  }
243  s->local_wait_for_all( *this, t );
244 }
static generic_scheduler * local_scheduler()
Obtain the thread-local instance of the TBB scheduler.
Definition: governor.h:126
Work stealing task scheduler.
Definition: scheduler.h:124
task()
Default constructor.
Definition: task.h:602
void const char const char int ITT_FORMAT __itt_group_sync s

References tbb::task_list::clear(), tbb::task_list::first, tbb::internal::governor::local_scheduler(), tbb::task_list::next_ptr, prefix(), and s.

Here is the call graph for this function:

◆ spawn_root_and_wait() [1/2]

static void tbb::task::spawn_root_and_wait ( task root)
inlinestatic

Spawn task allocated by allocate_root, wait for it to complete, and deallocate it.

Definition at line 781 of file task.h.

781  {
782  root.prefix().owner->spawn_root_and_wait( root, root.prefix().next );
783  }

References prefix().

Referenced by tbb::interface9::internal::start_for< Range, Body, Partitioner >::run(), tbb::interface9::internal::start_reduce< Range, Body, Partitioner >::run(), tbb::internal::start_scan< Range, Body, Partitioner >::run(), tbb::interface9::internal::start_deterministic_reduce< Range, Body, Partitioner >::run(), and tbb::pipeline::run().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ spawn_root_and_wait() [2/2]

void tbb::task::spawn_root_and_wait ( task_list root_list)
inlinestatic

Spawn root tasks on list and wait for all of them to finish.

If there are more tasks than worker threads, the tasks are spawned in order of front to back.

Definition at line 1051 of file task.h.

1051  {
1052  if( task* t = root_list.first ) {
1053  t->prefix().owner->spawn_root_and_wait( *t, *root_list.next_ptr );
1054  root_list.clear();
1055  }
1056 }
task()
Default constructor.
Definition: task.h:602

References tbb::task_list::clear(), tbb::task_list::first, tbb::task_list::next_ptr, and prefix().

Here is the call graph for this function:

◆ state()

state_type tbb::task::state ( ) const
inline

Current execution state.

Definition at line 859 of file task.h.

859 {return state_type(prefix().state);}
state_type
Enumeration of task states that the scheduler considers.
Definition: task.h:612
state_type state() const
Current execution state.
Definition: task.h:859
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
Definition: task.h:941

References prefix().

Referenced by tbb::internal::generic_scheduler::allocate_task(), tbb::interface5::internal::task_base::destroy(), tbb::internal::arena::enqueue_task(), tbb::internal::generic_scheduler::free_nonlocal_small_task(), tbb::internal::generic_scheduler::free_task(), tbb::internal::custom_scheduler< SchedulerTraits >::local_wait_for_all(), tbb::internal::generic_scheduler::prepare_for_spawning(), recycle_as_child_of(), recycle_as_continuation(), recycle_as_safe_continuation(), and recycle_to_reexecute().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ wait_for_all()

void tbb::task::wait_for_all ( )
inline

Wait for reference count to become one, and set reference count to zero.

Works on tasks while waiting.

Definition at line 792 of file task.h.

792  {
793  prefix().owner->wait_for_all( *this, NULL );
794  }
internal::task_prefix & prefix(internal::version_tag *=NULL) const
Get reference to corresponding task_prefix.
Definition: task.h:941

References prefix().

Referenced by tbb::flow::interface10::graph::wait_functor::operator()(), tbb::internal::task_group_base::wait(), and tbb::internal::task_group_base::~task_group_base().

Here is the call graph for this function:
Here is the caller graph for this function:

Friends And Related Function Documentation

◆ interface5::internal::task_base

friend class interface5::internal::task_base
friend

Definition at line 928 of file task.h.

◆ internal::allocate_additional_child_of_proxy

friend class internal::allocate_additional_child_of_proxy
friend

Definition at line 937 of file task.h.

◆ internal::allocate_child_proxy

friend class internal::allocate_child_proxy
friend

Definition at line 936 of file task.h.

Referenced by allocate_child().

◆ internal::allocate_continuation_proxy

friend class internal::allocate_continuation_proxy
friend

Definition at line 935 of file task.h.

Referenced by allocate_continuation().

◆ internal::allocate_root_proxy

friend class internal::allocate_root_proxy
friend

Definition at line 931 of file task.h.

Referenced by allocate_root().

◆ internal::allocate_root_with_context_proxy

friend class internal::allocate_root_with_context_proxy
friend

Definition at line 933 of file task.h.

◆ internal::is_critical

bool internal::is_critical ( task )
friend

◆ internal::make_critical

◆ internal::scheduler

friend class internal::scheduler
friend

Definition at line 930 of file task.h.

◆ task_list

friend class task_list
friend

Definition at line 929 of file task.h.


The documentation for this class was generated from the following files:

Copyright © 2005-2019 Intel Corporation. All Rights Reserved.

Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are registered trademarks or trademarks of Intel Corporation or its subsidiaries in the United States and other countries.

* Other names and brands may be claimed as the property of others.