<p>This class implements the work-stealing queue described in the paper, <ahref="https://www.di.ens.fr/~zappa/readings/ppopp13.pdf">Correct and Efficient Work-Stealing for Weak Memory Models</a>, and extends it to include priority.</p><p>Only the queue owner can perform pop and push operations, while others can steal data from the queue simultaneously. Priority starts from zero (highest priority) to the template value <code>TF_MAX_PRIORITY-1</code> (lowest priority). All operations are associated with priority values to indicate the corresponding queues to which an operation is applied.</p><p>The default template value, <code>TF_MAX_PRIORITY</code>, is <code><ahref="namespacetf.html#ac9f4add8f716ed323b0bdbbc1d89346fa26a4b44a837bf97b972628509912b4a5" class="m-doc">TaskPriority::<wbr/>MAX</a></code> which applies only three priority levels to the task queue.</p><preclass="m-code"><spanclass="k">auto</span><spanclass="w"></span><spanclass="p">[</span><spanclass="n">A</span><spanclass="p">,</span><spanclass="w"></span><spanclass="n">B</span><spanclass="p">,</span><spanclass="w"></span><spanclass="n">C</span><spanclass="p">,</span><spanclass="w"></span><spanclass="n">D</span><spanclass="p">,</span><spanclass="w"></span><spanclass="n">E</span><spanclass="p">]</span><spanclass="w"></span><spanclass="o">=</span><spanclass="w"></span><spanclass="n">taskflow</span><spanclass="p">.</span><spanclass="n">emplace</span><spanclass="p">(</span><spanclass="w"></span>
<spanclass="n">executor</span><spanclass="p">.</span><spanclass="n">run</span><spanclass="p">(</span><spanclass="n">taskflow</span><spanclass="p">).</span><spanclass="n">wait</span><spanclass="p">();</span><spanclass="w"></span></pre><p>In the above example, we have a task graph of five tasks, <code>A</code>, <code>B</code>, <code>C</code>, <code>D</code>, and <code>E</code>, in which <code>B</code>, <code>C</code>, and <code>D</code> can run in simultaneously when <code>A</code> finishes. Since we only uses one worker thread in the executor, we can deterministically run <code>B</code> first, then <code>D</code>, and <code>C</code> in order of their priority values. The output is as follows:</p><preclass="m-console"><spanclass="go">Task B: 0</span>