blob: fb0921fa6568c8df24cbc9a7ddc92a88c8199130 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>tbb::task Class Reference</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.7 -->
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li id="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
</ul></div>
<div class="tabs">
<ul>
<li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
<li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
</ul></div>
<div class="nav">
<a class="el" href="a00267.html">tbb</a>::<a class="el" href="a00199.html">task</a></div>
<h1>tbb::task Class Reference<br>
<small>
[<a class="el" href="a00279.html">Task Scheduling</a>]</small>
</h1><!-- doxytag: class="tbb::task" -->Base class for user-defined tasks.
<a href="#_details">More...</a>
<p>
<code>#include &lt;<a class="el" href="a00427.html">task.h</a>&gt;</code>
<p>
<p>Inheritance diagram for tbb::task:
<p><center><img src="a00199.png" usemap="#tbb::task_map" border="0" alt=""></center>
<map name="tbb::task_map">
<area href="a00163.html" alt="tbb::empty_task" shape="rect" coords="0,56,97,80">
</map>
<a href="a00075.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">typedef internal::affinity_id&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">An id as used for specifying affinity. <a href="#d61bb32389d3857bf7511d69beaafb76"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">task is running, and will be destroyed after method <a class="el" href="a00199.html#22c298cd40937a431a06777423f002f6">execute()</a> completes. <a href="#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">task to be rescheduled. <a href="#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">task is in ready pool, or is going to be put there, or was just taken off. <a href="#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">task object is freshly allocated or recycled. <a href="#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">task object is on free list, or is going to be put there, or was just taken off. <a href="#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">task to be recycled as continuation <a href="#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e">state_type</a> { <br>
&nbsp;&nbsp;<a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9">executing</a>,
<a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513">reexecute</a>,
<a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a">ready</a>,
<a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c">allocated</a>,
<br>
&nbsp;&nbsp;<a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735">freed</a>,
<a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d">recycle</a>
<br>
}</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Enumeration of task states that the scheduler considers. <a href="a00199.html#4a3c415562d17905390ea5b49d12293e">More...</a><br></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="98245ee0473f84cb19dbbf8c81134908"></a><!-- doxytag: member="tbb::task::~task" ref="98245ee0473f84cb19dbbf8c81134908" args="()" -->
virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#98245ee0473f84cb19dbbf8c81134908">~task</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destructor. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="22c298cd40937a431a06777423f002f6"></a><!-- doxytag: member="tbb::task::execute" ref="22c298cd40937a431a06777423f002f6" args="()=0" -->
virtual <a class="el" href="a00199.html">task</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#22c298cd40937a431a06777423f002f6">execute</a> ()=0</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Should be overridden by derived classes. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">internal::allocate_continuation_proxy &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#1434c79a5138993269d034008bff7329">allocate_continuation</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns proxy for overloaded new that allocates a continuation task of *this. <a href="#1434c79a5138993269d034008bff7329"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1ff794f7053cd9148d5f280fbf07377f"></a><!-- doxytag: member="tbb::task::allocate_child" ref="1ff794f7053cd9148d5f280fbf07377f" args="()" -->
internal::allocate_child_proxy &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#1ff794f7053cd9148d5f280fbf07377f">allocate_child</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns proxy for overloaded new that allocates a child task of *this. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#dfaacf92685e5f86393bf657b2853bf8">destroy</a> (<a class="el" href="a00199.html">task</a> &amp;t)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destroy a task. <a href="#dfaacf92685e5f86393bf657b2853bf8"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#a67a79e18f62b43a623a00cfbd76db4c">recycle_as_continuation</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Change this to be a continuation of its former self. <a href="#a67a79e18f62b43a623a00cfbd76db4c"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#3b290d14109704e2b69dc1ac980a7a76">recycle_as_safe_continuation</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Recommended to use, safe variant of recycle_as_continuation. <a href="#3b290d14109704e2b69dc1ac980a7a76"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="db399855177438bbc9cc61d508dae8d2"></a><!-- doxytag: member="tbb::task::recycle_as_child_of" ref="db399855177438bbc9cc61d508dae8d2" args="(task &amp;new_parent)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#db399855177438bbc9cc61d508dae8d2">recycle_as_child_of</a> (<a class="el" href="a00199.html">task</a> &amp;new_parent)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Change this to be a child of new_parent. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#4f1be9bbcdb487830dbe298b68d85144">recycle_to_reexecute</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Schedule this for reexecution after current <a class="el" href="a00199.html#22c298cd40937a431a06777423f002f6">execute()</a> returns. <a href="#4f1be9bbcdb487830dbe298b68d85144"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7653ceef53a188d05b5c779e1104b698"></a><!-- doxytag: member="tbb::task::depth" ref="7653ceef53a188d05b5c779e1104b698" args="() const " -->
intptr_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>depth</b> () const </td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e864e9c80e3d79f00d77fb99f4757621"></a><!-- doxytag: member="tbb::task::set_depth" ref="e864e9c80e3d79f00d77fb99f4757621" args="(intptr_t)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>set_depth</b> (intptr_t)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c83fcc26f6513f0e06de70cbab9dee46"></a><!-- doxytag: member="tbb::task::add_to_depth" ref="c83fcc26f6513f0e06de70cbab9dee46" args="(int)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>add_to_depth</b> (int)</td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="06a4206a57e8e12a439b14d6d41cfd92"></a><!-- doxytag: member="tbb::task::set_ref_count" ref="06a4206a57e8e12a439b14d6d41cfd92" args="(int count)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#06a4206a57e8e12a439b14d6d41cfd92">set_ref_count</a> (int count)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set reference count. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#f5fb43c7ad0de5a4b95703cebc39e345">increment_ref_count</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Atomically increment reference count. <a href="#f5fb43c7ad0de5a4b95703cebc39e345"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ef4680f5c148020c5e7e43ddef44cd5d">decrement_ref_count</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Atomically decrement reference count. <a href="#ef4680f5c148020c5e7e43ddef44cd5d"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3ce28ca9baa771cfc37ecd72e69c4f3c"></a><!-- doxytag: member="tbb::task::spawn_and_wait_for_all" ref="3ce28ca9baa771cfc37ecd72e69c4f3c" args="(task &amp;child)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#3ce28ca9baa771cfc37ecd72e69c4f3c">spawn_and_wait_for_all</a> (<a class="el" href="a00199.html">task</a> &amp;child)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Similar to spawn followed by wait_for_all, but more efficient. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="894ab68378e502776d8220eea7ce9fa1"></a><!-- doxytag: member="tbb::task::spawn_and_wait_for_all" ref="894ab68378e502776d8220eea7ce9fa1" args="(task_list &amp;list)" -->
void __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#894ab68378e502776d8220eea7ce9fa1">spawn_and_wait_for_all</a> (<a class="el" href="a00202.html">task_list</a> &amp;list)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Similar to spawn followed by wait_for_all, but more efficient. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#53d2615ad9c38859b4c8080936600283">wait_for_all</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Wait for reference count to become one, and set reference count to zero. <a href="#53d2615ad9c38859b4c8080936600283"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="314e98ee4347ccec83efcb9ee22e8596"></a><!-- doxytag: member="tbb::task::parent" ref="314e98ee4347ccec83efcb9ee22e8596" args="() const " -->
<a class="el" href="a00199.html">task</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#314e98ee4347ccec83efcb9ee22e8596">parent</a> () const </td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">task on whose behalf this task is working, or NULL if this is a root. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d8c36a93f3972590fbb65ff1cef3173b"></a><!-- doxytag: member="tbb::task::context" ref="d8c36a93f3972590fbb65ff1cef3173b" args="()" -->
<a class="el" href="a00201.html">task_group_context</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#d8c36a93f3972590fbb65ff1cef3173b">context</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Shared context that is used to communicate asynchronous state changes. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f9169402702f56bf519448aaf34450aa"></a><!-- doxytag: member="tbb::task::is_stolen_task" ref="f9169402702f56bf519448aaf34450aa" args="() const " -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#f9169402702f56bf519448aaf34450aa">is_stolen_task</a> () const </td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">True if task was stolen from the task pool of another thread. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0af7b2d7e6e8b4333b2accfce3dfb374"></a><!-- doxytag: member="tbb::task::state" ref="0af7b2d7e6e8b4333b2accfce3dfb374" args="() const " -->
<a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e">state_type</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#0af7b2d7e6e8b4333b2accfce3dfb374">state</a> () const </td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Current execution state. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ad774f55eaec008ae02b236423209ced"></a><!-- doxytag: member="tbb::task::ref_count" ref="ad774f55eaec008ae02b236423209ced" args="() const " -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ad774f55eaec008ae02b236423209ced">ref_count</a> () const </td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The internal reference count. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c26718b3b247cd13deb1a741902e7105"></a><!-- doxytag: member="tbb::task::is_owned_by_current_thread" ref="c26718b3b247cd13deb1a741902e7105" args="() const " -->
bool __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#c26718b3b247cd13deb1a741902e7105">is_owned_by_current_thread</a> () const </td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Obsolete, and only retained for the sake of backward compatibility. Always returns true. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dca19d7a45487a7d67a0db517e2b57c9"></a><!-- doxytag: member="tbb::task::set_affinity" ref="dca19d7a45487a7d67a0db517e2b57c9" args="(affinity_id id)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#dca19d7a45487a7d67a0db517e2b57c9">set_affinity</a> (<a class="el" href="a00199.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> id)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set affinity for this task. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3a920a56b0bcf2801518fb45b2c9d2be"></a><!-- doxytag: member="tbb::task::affinity" ref="3a920a56b0bcf2801518fb45b2c9d2be" args="() const " -->
<a class="el" href="a00199.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#3a920a56b0bcf2801518fb45b2c9d2be">affinity</a> () const </td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Current affinity of this task. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void __TBB_EXPORTED_METHOD&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#713c338c8eeaebdc5a6b10a69c039b06">note_affinity</a> (<a class="el" href="a00199.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a> id)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Invoked by scheduler to notify task that it ran on unexpected thread. <a href="#713c338c8eeaebdc5a6b10a69c039b06"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#0f3fb4aac549ab642022450a4bd13326">cancel_group_execution</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initiates cancellation of all tasks in this cancellation group and its subordinate groups. <a href="#0f3fb4aac549ab642022450a4bd13326"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="025f18118c057c4c8db87ff2ce8df975"></a><!-- doxytag: member="tbb::task::is_cancelled" ref="025f18118c057c4c8db87ff2ce8df975" args="() const " -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#025f18118c057c4c8db87ff2ce8df975">is_cancelled</a> () const </td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns true if the context received cancellation request. <br></td></tr>
<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="23acb0da0afd690da797f9f882027d34"></a><!-- doxytag: member="tbb::task::allocate_root" ref="23acb0da0afd690da797f9f882027d34" args="()" -->
static internal::allocate_root_proxy&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#23acb0da0afd690da797f9f882027d34">allocate_root</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns proxy for overloaded new that allocates a root task. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8ccc518caf31075a3e073996d2d240a4"></a><!-- doxytag: member="tbb::task::allocate_root" ref="8ccc518caf31075a3e073996d2d240a4" args="(task_group_context &amp;ctx)" -->
static internal::allocate_root_with_context_proxy&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#8ccc518caf31075a3e073996d2d240a4">allocate_root</a> (<a class="el" href="a00201.html">task_group_context</a> &amp;ctx)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns proxy for overloaded new that allocates a root task associated with user supplied context. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ce8ce689c26a4ddf343829bc3c73290a"></a><!-- doxytag: member="tbb::task::spawn_root_and_wait" ref="ce8ce689c26a4ddf343829bc3c73290a" args="(task &amp;root)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ce8ce689c26a4ddf343829bc3c73290a">spawn_root_and_wait</a> (<a class="el" href="a00199.html">task</a> &amp;root)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Spawn task allocated by allocate_root, wait for it to complete, and deallocate it. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#c33c7edbaec67aa8a56f48986a9dc69f">spawn_root_and_wait</a> (<a class="el" href="a00202.html">task_list</a> &amp;root_list)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Spawn root tasks on list and wait for all of them to finish. <a href="#c33c7edbaec67aa8a56f48986a9dc69f"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8365d063c0cc9d7bd616bca47256b93c"></a><!-- doxytag: member="tbb::task::enqueue" ref="8365d063c0cc9d7bd616bca47256b93c" args="(task &amp;t)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#8365d063c0cc9d7bd616bca47256b93c">enqueue</a> (<a class="el" href="a00199.html">task</a> &amp;t)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Enqueue task for starvation-resistant execution. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bd43e8d6249738efafd12d6a4c72c5e3"></a><!-- doxytag: member="tbb::task::self" ref="bd43e8d6249738efafd12d6a4c72c5e3" args="()" -->
static <a class="el" href="a00199.html">task</a> &amp;__TBB_EXPORTED_FUNC&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#bd43e8d6249738efafd12d6a4c72c5e3">self</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The innermost task being executed or destroyed by the current thread at the moment. <br></td></tr>
<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2bce8ec6e44706e70128f5cf91b76e67"></a><!-- doxytag: member="tbb::task::task" ref="2bce8ec6e44706e70128f5cf91b76e67" args="()" -->
&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#2bce8ec6e44706e70128f5cf91b76e67">task</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor. <br></td></tr>
<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="81d0122aee4ddae419a743ee50d7038e"></a><!-- doxytag: member="tbb::task::interface5::internal::task_base" ref="81d0122aee4ddae419a743ee50d7038e" args="" -->
class&nbsp;</td><td class="memItemRight" valign="bottom"><b>interface5::internal::task_base</b></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5eabadbca46f93ce6fb08290e85a0a65"></a><!-- doxytag: member="tbb::task::task_list" ref="5eabadbca46f93ce6fb08290e85a0a65" args="" -->
class&nbsp;</td><td class="memItemRight" valign="bottom"><b>task_list</b></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e296810002652d771f692e20ca87e898"></a><!-- doxytag: member="tbb::task::internal::scheduler" ref="e296810002652d771f692e20ca87e898" args="" -->
class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::scheduler</b></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="387b945c106854e1ed525f0668092930"></a><!-- doxytag: member="tbb::task::internal::allocate_root_proxy" ref="387b945c106854e1ed525f0668092930" args="" -->
class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::allocate_root_proxy</b></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ecedb9436fb30df30cb3a52c64bb97e5"></a><!-- doxytag: member="tbb::task::internal::allocate_root_with_context_proxy" ref="ecedb9436fb30df30cb3a52c64bb97e5" args="" -->
class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::allocate_root_with_context_proxy</b></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9987b3b1174772e5e853bd94b9f15350"></a><!-- doxytag: member="tbb::task::internal::allocate_continuation_proxy" ref="9987b3b1174772e5e853bd94b9f15350" args="" -->
class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::allocate_continuation_proxy</b></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1f9e255654086b52fe107e4d8bbc8b7d"></a><!-- doxytag: member="tbb::task::internal::allocate_child_proxy" ref="1f9e255654086b52fe107e4d8bbc8b7d" args="" -->
class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::allocate_child_proxy</b></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0e99ce0045ea3c55d239f38ea026b8a7"></a><!-- doxytag: member="tbb::task::internal::allocate_additional_child_of_proxy" ref="0e99ce0045ea3c55d239f38ea026b8a7" args="" -->
class&nbsp;</td><td class="memItemRight" valign="bottom"><b>internal::allocate_additional_child_of_proxy</b></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
Base class for user-defined tasks.
<p>
<hr><h2>Member Typedef Documentation</h2>
<a class="anchor" name="d61bb32389d3857bf7511d69beaafb76"></a><!-- doxytag: member="tbb::task::affinity_id" ref="d61bb32389d3857bf7511d69beaafb76" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef internal::affinity_id <a class="el" href="a00199.html#d61bb32389d3857bf7511d69beaafb76">tbb::task::affinity_id</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
An id as used for specifying affinity.
<p>
Guaranteed to be integral type. Value of 0 means no affinity.
</div>
</div><p>
<hr><h2>Member Enumeration Documentation</h2>
<a class="anchor" name="4a3c415562d17905390ea5b49d12293e"></a><!-- doxytag: member="tbb::task::state_type" ref="4a3c415562d17905390ea5b49d12293e" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="a00199.html#4a3c415562d17905390ea5b49d12293e">tbb::task::state_type</a> </td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Enumeration of task states that the scheduler considers.
<p>
<dl compact><dt><b>Enumerator: </b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" name="4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9"></a><!-- doxytag: member="executing" ref="4a3c415562d17905390ea5b49d12293ead0fe2302ccc360923f738c2ed7ec1b9" args="" -->executing</em>&nbsp;</td><td>
task is running, and will be destroyed after method <a class="el" href="a00199.html#22c298cd40937a431a06777423f002f6">execute()</a> completes. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513"></a><!-- doxytag: member="reexecute" ref="4a3c415562d17905390ea5b49d12293e3bf499aa6e6487cd1ace883a63100513" args="" -->reexecute</em>&nbsp;</td><td>
task to be rescheduled. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a"></a><!-- doxytag: member="ready" ref="4a3c415562d17905390ea5b49d12293e0841dcf1c2a96dee9aa7b69f636cb81a" args="" -->ready</em>&nbsp;</td><td>
task is in ready pool, or is going to be put there, or was just taken off. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c"></a><!-- doxytag: member="allocated" ref="4a3c415562d17905390ea5b49d12293ebe94d3348dd038e41107819f00c1884c" args="" -->allocated</em>&nbsp;</td><td>
task object is freshly allocated or recycled. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735"></a><!-- doxytag: member="freed" ref="4a3c415562d17905390ea5b49d12293ecc67ca92bd6f1ce9738a1e9e7206b735" args="" -->freed</em>&nbsp;</td><td>
task object is on free list, or is going to be put there, or was just taken off. </td></tr>
<tr><td valign="top"><em><a class="anchor" name="4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d"></a><!-- doxytag: member="recycle" ref="4a3c415562d17905390ea5b49d12293e58debec6ab130290640d0cc2eedba35d" args="" -->recycle</em>&nbsp;</td><td>
task to be recycled as continuation </td></tr>
</table>
</dl>
</div>
</div><p>
<hr><h2>Member Function Documentation</h2>
<a class="anchor" name="1434c79a5138993269d034008bff7329"></a><!-- doxytag: member="tbb::task::allocate_continuation" ref="1434c79a5138993269d034008bff7329" args="()" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">internal::allocate_continuation_proxy&amp; tbb::task::allocate_continuation </td>
<td>(</td>
<td class="paramname"> </td>
<td>&nbsp;)&nbsp;</td>
<td width="100%"><code> [inline]</code></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Returns proxy for overloaded new that allocates a continuation task of *this.
<p>
The continuation's parent becomes the parent of *this.
</div>
</div><p>
<a class="anchor" name="0f3fb4aac549ab642022450a4bd13326"></a><!-- doxytag: member="tbb::task::cancel_group_execution" ref="0f3fb4aac549ab642022450a4bd13326" args="()" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool tbb::task::cancel_group_execution </td>
<td>(</td>
<td class="paramname"> </td>
<td>&nbsp;)&nbsp;</td>
<td width="100%"><code> [inline]</code></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Initiates cancellation of all tasks in this cancellation group and its subordinate groups.
<p>
<dl compact><dt><b>Returns:</b></dt><dd>false if cancellation has already been requested, true otherwise. </dd></dl>
</div>
</div><p>
<a class="anchor" name="ef4680f5c148020c5e7e43ddef44cd5d"></a><!-- doxytag: member="tbb::task::decrement_ref_count" ref="ef4680f5c148020c5e7e43ddef44cd5d" args="()" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int tbb::task::decrement_ref_count </td>
<td>(</td>
<td class="paramname"> </td>
<td>&nbsp;)&nbsp;</td>
<td width="100%"><code> [inline]</code></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Atomically decrement reference count.
<p>
Has release semantics.
</div>
</div><p>
<a class="anchor" name="dfaacf92685e5f86393bf657b2853bf8"></a><!-- doxytag: member="tbb::task::destroy" ref="dfaacf92685e5f86393bf657b2853bf8" args="(task &amp;t)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void __TBB_EXPORTED_METHOD tbb::task::destroy </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a00199.html">task</a> &amp;&nbsp;</td>
<td class="paramname"> <em>t</em> </td>
<td>&nbsp;)&nbsp;</td>
<td width="100%"></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Destroy a task.
<p>
Usually, calling this method is unnecessary, because a task is implicitly deleted after its <a class="el" href="a00199.html#22c298cd40937a431a06777423f002f6">execute()</a> method runs. However, sometimes a task needs to be explicitly deallocated, such as when a root task is used as the parent in spawn_and_wait_for_all.
</div>
</div><p>
<a class="anchor" name="f5fb43c7ad0de5a4b95703cebc39e345"></a><!-- doxytag: member="tbb::task::increment_ref_count" ref="f5fb43c7ad0de5a4b95703cebc39e345" args="()" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void tbb::task::increment_ref_count </td>
<td>(</td>
<td class="paramname"> </td>
<td>&nbsp;)&nbsp;</td>
<td width="100%"><code> [inline]</code></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Atomically increment reference count.
<p>
Has acquire semantics
</div>
</div><p>
<a class="anchor" name="713c338c8eeaebdc5a6b10a69c039b06"></a><!-- doxytag: member="tbb::task::note_affinity" ref="713c338c8eeaebdc5a6b10a69c039b06" args="(affinity_id id)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">virtual void __TBB_EXPORTED_METHOD tbb::task::note_affinity </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a00199.html#d61bb32389d3857bf7511d69beaafb76">affinity_id</a>&nbsp;</td>
<td class="paramname"> <em>id</em> </td>
<td>&nbsp;)&nbsp;</td>
<td width="100%"><code> [virtual]</code></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Invoked by scheduler to notify task that it ran on unexpected thread.
<p>
Invoked before method <a class="el" href="a00199.html#22c298cd40937a431a06777423f002f6">execute()</a> runs, if task is stolen, or task has affinity but will be executed on another thread.<p>
The default action does nothing.
</div>
</div><p>
<a class="anchor" name="a67a79e18f62b43a623a00cfbd76db4c"></a><!-- doxytag: member="tbb::task::recycle_as_continuation" ref="a67a79e18f62b43a623a00cfbd76db4c" args="()" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void tbb::task::recycle_as_continuation </td>
<td>(</td>
<td class="paramname"> </td>
<td>&nbsp;)&nbsp;</td>
<td width="100%"><code> [inline]</code></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Change this to be a continuation of its former self.
<p>
The caller must guarantee that the task's refcount does not become zero until after the method <a class="el" href="a00199.html#22c298cd40937a431a06777423f002f6">execute()</a> returns. Typically, this is done by having method <a class="el" href="a00199.html#22c298cd40937a431a06777423f002f6">execute()</a> return a pointer to a child of the task. If the guarantee cannot be made, use method recycle_as_safe_continuation instead.<p>
Because of the hazard, this method may be deprecated in the future.
</div>
</div><p>
<a class="anchor" name="3b290d14109704e2b69dc1ac980a7a76"></a><!-- doxytag: member="tbb::task::recycle_as_safe_continuation" ref="3b290d14109704e2b69dc1ac980a7a76" args="()" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void tbb::task::recycle_as_safe_continuation </td>
<td>(</td>
<td class="paramname"> </td>
<td>&nbsp;)&nbsp;</td>
<td width="100%"><code> [inline]</code></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Recommended to use, safe variant of recycle_as_continuation.
<p>
For safety, it requires additional increment of ref_count. With no decendants and ref_count of 1, it has the semantics of recycle_to_reexecute.
</div>
</div><p>
<a class="anchor" name="4f1be9bbcdb487830dbe298b68d85144"></a><!-- doxytag: member="tbb::task::recycle_to_reexecute" ref="4f1be9bbcdb487830dbe298b68d85144" args="()" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void tbb::task::recycle_to_reexecute </td>
<td>(</td>
<td class="paramname"> </td>
<td>&nbsp;)&nbsp;</td>
<td width="100%"><code> [inline]</code></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Schedule this for reexecution after current <a class="el" href="a00199.html#22c298cd40937a431a06777423f002f6">execute()</a> returns.
<p>
Made obsolete by recycle_as_safe_continuation; may become deprecated.
</div>
</div><p>
<a class="anchor" name="c33c7edbaec67aa8a56f48986a9dc69f"></a><!-- doxytag: member="tbb::task::spawn_root_and_wait" ref="c33c7edbaec67aa8a56f48986a9dc69f" args="(task_list &amp;root_list)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void tbb::task::spawn_root_and_wait </td>
<td>(</td>
<td class="paramtype"><a class="el" href="a00202.html">task_list</a> &amp;&nbsp;</td>
<td class="paramname"> <em>root_list</em> </td>
<td>&nbsp;)&nbsp;</td>
<td width="100%"><code> [inline, static]</code></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Spawn root tasks on list and wait for all of them to finish.
<p>
If there are more tasks than worker threads, the tasks are spawned in order of front to back.
</div>
</div><p>
<a class="anchor" name="53d2615ad9c38859b4c8080936600283"></a><!-- doxytag: member="tbb::task::wait_for_all" ref="53d2615ad9c38859b4c8080936600283" args="()" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void tbb::task::wait_for_all </td>
<td>(</td>
<td class="paramname"> </td>
<td>&nbsp;)&nbsp;</td>
<td width="100%"><code> [inline]</code></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Wait for reference count to become one, and set reference count to zero.
<p>
Works on tasks while waiting.
</div>
</div><p>
<hr>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="a00427.html">task.h</a></ul>
<hr>
<p></p>
Copyright &copy; 2005-2010 Intel Corporation. All Rights Reserved.
<p></p>
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.
<p></p>
* Other names and brands may be claimed as the property of others.