<div class="fragment"><div class="line"><a class="code" href="classtf_1_1Taskflow.html">tf::Taskflow</a> taskflow;</div><div class="line"><a class="code" href="classtf_1_1Executor.html">tf::Executor</a> executor;</div><div class="line"></div><div class="line"><span class="keywordtype">size_t</span> rounds = 10000;</div><div class="line"><span class="keywordtype">size_t</span> tosses = 0; </div><div class="line"><span class="keywordtype">size_t</span> total_tosses = 0; </div><div class="line"><span class="keywordtype">double</span> average_tosses = 0.0; </div><div class="line"></div><div class="line"><span class="keyword">auto</span> A = taskflow.<a class="code" href="classtf_1_1FlowBuilder.html#a796e29175380f70246cf2a5639adc437">emplace</a>( [&](){ tosses = 0; } ).name(<span class="stringliteral">"init"</span>); </div><div class="line"></div><div class="line"><span class="comment">// start over the flip again</span></div><div class="line"><span class="keyword">auto</span> B = taskflow.<a class="code" href="classtf_1_1FlowBuilder.html#a796e29175380f70246cf2a5639adc437">emplace</a>( [&](){ ++tosses; <span class="keywordflow">return</span> <a class="codeRef" doxygen="/Users/twhuang/PhD/Code/cpp-taskflow/doxygen/cppreference-doxygen-web.tag.xml:http://en.cppreference.com/w/" href="http://en.cppreference.com/w/cpp/numeric/random/rand.html">std::rand</a>()%2; } ).name(<span class="stringliteral">"flip-coin-1"</span>);</div><div class="line"><span class="keyword">auto</span> C = taskflow.<a class="code" href="classtf_1_1FlowBuilder.html#a796e29175380f70246cf2a5639adc437">emplace</a>( [&](){ <span class="keywordflow">return</span> <a class="codeRef" doxygen="/Users/twhuang/PhD/Code/cpp-taskflow/doxygen/cppreference-doxygen-web.tag.xml:http://en.cppreference.com/w/" href="http://en.cppreference.com/w/cpp/numeric/random/rand.html">std::rand</a>()%2; } ).name(<span class="stringliteral">"flip-coin-2"</span>);</div><div class="line"><span class="keyword">auto</span> D = taskflow.<a class="code" href="classtf_1_1FlowBuilder.html#a796e29175380f70246cf2a5639adc437">emplace</a>( [&](){ <span class="keywordflow">return</span> <a class="codeRef" doxygen="/Users/twhuang/PhD/Code/cpp-taskflow/doxygen/cppreference-doxygen-web.tag.xml:http://en.cppreference.com/w/" href="http://en.cppreference.com/w/cpp/numeric/random/rand.html">std::rand</a>()%2; } ).name(<span class="stringliteral">"flip-coin-3"</span>);</div><div class="line"><span class="keyword">auto</span> E = taskflow.<a class="code" href="classtf_1_1FlowBuilder.html#a796e29175380f70246cf2a5639adc437">emplace</a>( [&](){ <span class="keywordflow">return</span> <a class="codeRef" doxygen="/Users/twhuang/PhD/Code/cpp-taskflow/doxygen/cppreference-doxygen-web.tag.xml:http://en.cppreference.com/w/" href="http://en.cppreference.com/w/cpp/numeric/random/rand.html">std::rand</a>()%2; } ).name(<span class="stringliteral">"flip-coin-4"</span>);</div><div class="line"><span class="keyword">auto</span> F = taskflow.<a class="code" href="classtf_1_1FlowBuilder.html#a796e29175380f70246cf2a5639adc437">emplace</a>( [&](){ <span class="keywordflow">return</span> <a class="codeRef" doxygen="/Users/twhuang/PhD/Code/cpp-taskflow/doxygen/cppreference-doxygen-web.tag.xml:http://en.cppreference.com/w/" href="http://en.cppreference.com/w/cpp/numeric/random/rand.html">std::rand</a>()%2; } ).name(<span class="stringliteral">"flip-coin-5"</span>);</div><div class="line"></div><div class="line"><span class="comment">// reach the target; record the number of tosses </span></div><div class="line"><span class="keyword">auto</span> G = taskflow.<a class="code" href="classtf_1_1FlowBuilder.html#a796e29175380f70246cf2a5639adc437">emplace</a>( [&](){ total_tosses += tosses; } ).name(<span class="stringliteral">"stop"</span>);</div><div class="line"></div><div class="line">A.precede(B).name;</div><div class="line"></div><div class="line"><span class="comment">// five probabilistic conditions</span></div><div class="line">B.precede(C, B);</div><div class="line">C.precede(D, B);</div><div class="line">D.<a class="code" href="classtf_1_1Task.html#a8c78c453295a553c1c016e4062da8588">precede</a>(E, B);</div><div class="line">E.<a class="code" href="classtf_1_1Task.html#a8c78c453295a553c1c016e4062da8588">precede</a>(F, B);</div><div class="line">F.<a class="code" href="classtf_1_1Task.html#a8c78c453295a553c1c016e4062da8588">precede</a>(G, B);</div><div class="line"></div><div class="line"><span class="comment">// repeat the flip-coin simulation by rounds times</span></div><div class="line">executor.<a class="code" href="classtf_1_1Executor.html#adca6cd0ce1bd7e6fa2ed2a55c9ae15e6">run_n</a>(taskflow, rounds).wait();</div><div class="line"></div><div class="line"><span class="comment">// calculate the expected number of tosses</span></div><div class="line">average_tosses = total_tosses / (double)rounds;</div><div class="line"></div><div class="line">assert(std::fabs(average_tosses-32.0)<1.0);</div></div><!-- fragment --><p>Running the taskflow by a fair number of times, the average tosses we have is close to 32. The taskflow diagram is depicted below.</p>
0 commit comments