uvw/thread_8h_source.html
2023-05-22 11:13:58 +02:00

286 lines
40 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.6"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>uvw: src/uvw/thread.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">uvw<span id="projectnumber">&#160;3.1.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.6 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_98934c98f70735fe3a272005a9eb8736.html">uvw</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">thread.h</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#ifndef UVW_THREAD_INCLUDE_H</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define UVW_THREAD_INCLUDE_H</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include &lt;cstddef&gt;</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &lt;cstdint&gt;</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &lt;type_traits&gt;</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &lt;utility&gt;</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include &lt;uv.h&gt;</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include &quot;config.h&quot;</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include &quot;enum.hpp&quot;</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#include &quot;loop.h&quot;</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#include &quot;uv_type.hpp&quot;</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespaceuvw.html">uvw</a> {</div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="keyword">namespace </span>details {</div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="keyword">enum class</span> uvw_thread_create_flags : std::underlying_type_t&lt;uv_thread_create_flags&gt; {</div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> THREAD_NO_FLAGS = UV_THREAD_NO_FLAGS,</div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> THREAD_HAS_STACK_SIZE = UV_THREAD_HAS_STACK_SIZE</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span>};</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span>}</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="keyword">class </span>thread;</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="keyword">class </span>thread_local_storage;</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="keyword">class </span>once;</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="keyword">class </span>mutex;</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="keyword">class </span>rwlock;</div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="keyword">class </span>semaphore;</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="keyword">class </span>condition;</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="keyword">class </span>barrier;</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="classuvw_1_1thread.html"> 45</a></span><span class="keyword">class </span><a class="code hl_class" href="classuvw_1_1thread.html">thread</a> final: <span class="keyword">public</span> <a class="code hl_struct" href="structuvw_1_1uv__type.html">uv_type</a>&lt;uv_thread_t&gt; {</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">using </span>internal_task = std::function&lt;void(std::shared_ptr&lt;void&gt;)&gt;;</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">static</span> <span class="keywordtype">void</span> create_callback(<span class="keywordtype">void</span> *arg);</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> </div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">using </span>create_flags = details::uvw_thread_create_flags;</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">using </span>task = internal_task;</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">using </span>type = uv_thread_t;</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keyword">explicit</span> <a class="code hl_class" href="classuvw_1_1thread.html">thread</a>(loop::token token, std::shared_ptr&lt;loop&gt; ref, task t, std::shared_ptr&lt;void&gt; d = <span class="keyword">nullptr</span>) <span class="keyword">noexcept</span>;</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="classuvw_1_1thread.html#a148dc9a339fe0f610a57dabf17b4f420"> 61</a></span> <span class="keyword">static</span> type <a class="code hl_function" href="classuvw_1_1thread.html#a148dc9a339fe0f610a57dabf17b4f420">self</a>() noexcept;</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> </div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"><a class="line" href="classuvw_1_1thread.html#a9cf983df5ed1950322e1194a110c1df5"> 67</a></span> static <span class="keywordtype">int</span> <a class="code hl_function" href="classuvw_1_1thread.html#a9cf983df5ed1950322e1194a110c1df5">getcpu</a>() noexcept;</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"><a class="line" href="classuvw_1_1thread.html#abc4cd4285f800475959668bb4f49201d"> 75</a></span> static <span class="keywordtype">bool</span> <a class="code hl_function" href="classuvw_1_1thread.html#abc4cd4285f800475959668bb4f49201d">equal</a>(const <a class="code hl_class" href="classuvw_1_1thread.html">thread</a> &amp;tl, const <a class="code hl_class" href="classuvw_1_1thread.html">thread</a> &amp;tr) noexcept;</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> ~<a class="code hl_class" href="classuvw_1_1thread.html">thread</a>() noexcept;</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> </div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"><a class="line" href="classuvw_1_1thread.html#aed8c11f06ad88681453bb79e07605049"> 83</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classuvw_1_1thread.html#aed8c11f06ad88681453bb79e07605049">run</a>() noexcept;</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> </div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"><a class="line" href="classuvw_1_1thread.html#a662d4100464cb654407ffb4d0d4e7e5f"> 98</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classuvw_1_1thread.html#aed8c11f06ad88681453bb79e07605049">run</a>(create_flags opts, std::<span class="keywordtype">size_t</span> stack = {}) <span class="keyword">noexcept</span>;</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> </div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"><a class="line" href="classuvw_1_1thread.html#acfc275f0f1776cc8bc94540649099d0f"> 104</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classuvw_1_1thread.html#acfc275f0f1776cc8bc94540649099d0f">join</a>() noexcept;</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> </div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span>private:</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> std::shared_ptr&lt;<span class="keywordtype">void</span>&gt; data;</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> task func;</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span>};</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"><a class="line" href="classuvw_1_1thread__local__storage.html"> 118</a></span>class <a class="code hl_class" href="classuvw_1_1thread__local__storage.html">thread_local_storage</a> final: public <a class="code hl_struct" href="structuvw_1_1uv__type.html">uv_type</a>&lt;uv_key_t&gt; {</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keyword">explicit</span> <a class="code hl_class" href="classuvw_1_1thread__local__storage.html">thread_local_storage</a>(loop::token token, std::shared_ptr&lt;loop&gt; ref) <span class="keyword">noexcept</span>;</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <a class="code hl_class" href="classuvw_1_1thread__local__storage.html">~thread_local_storage</a>() <span class="keyword">noexcept</span>;</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> </div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"><a class="line" href="classuvw_1_1thread__local__storage.html#a26c56634e5d158b79a8fc2d408c745b7"> 130</a></span> T *<a class="code hl_function" href="classuvw_1_1thread__local__storage.html#a26c56634e5d158b79a8fc2d408c745b7">get</a>() noexcept {</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>T *<span class="keyword">&gt;</span>(uv_key_get(<a class="code hl_function" href="structuvw_1_1uv__type.html#a06a6cb7ebde27aa348e340b76e49c6ae">uv_type::raw</a>()));</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> }</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> </div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"><a class="line" href="classuvw_1_1thread__local__storage.html#accca7eed5946e0c21d5f4f256ba899b5"> 140</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classuvw_1_1thread__local__storage.html#accca7eed5946e0c21d5f4f256ba899b5">set</a>(T *value) <span class="keyword">noexcept</span> {</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">return</span> uv_key_set(<a class="code hl_function" href="structuvw_1_1uv__type.html#a06a6cb7ebde27aa348e340b76e49c6ae">uv_type::raw</a>(), value);</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> }</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span>};</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> </div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"><a class="line" href="classuvw_1_1once.html"> 151</a></span><span class="keyword">class </span><a class="code hl_class" href="classuvw_1_1once.html">once</a> final: <span class="keyword">public</span> <a class="code hl_struct" href="structuvw_1_1uv__type.html">uv_type</a>&lt;uv_once_t&gt; {</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keyword">static</span> uv_once_t *guard() <span class="keyword">noexcept</span>;</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> </div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keyword">using </span>uv_type::uv_type;</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> </div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="keyword">template</span>&lt;<span class="keyword">typename</span> F&gt;</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"><a class="line" href="classuvw_1_1once.html#a595b340d3b28f490d5e5cf8558ff8b09"> 167</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classuvw_1_1once.html#a595b340d3b28f490d5e5cf8558ff8b09">run</a>(F &amp;&amp;f) <span class="keyword">noexcept</span> {</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keyword">using </span>callback_type = void (*)(void);</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keyword">static_assert</span>(std::is_convertible_v&lt;F, callback_type&gt;);</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> callback_type cb = f;</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> uv_once(guard(), cb);</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> }</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span>};</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> </div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"><a class="line" href="classuvw_1_1mutex.html"> 183</a></span><span class="keyword">class </span><a class="code hl_class" href="classuvw_1_1mutex.html">mutex</a> final: <span class="keyword">public</span> <a class="code hl_struct" href="structuvw_1_1uv__type.html">uv_type</a>&lt;uv_mutex_t&gt; {</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_class" href="classuvw_1_1condition.html">condition</a>;</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> </div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keyword">explicit</span> <a class="code hl_class" href="classuvw_1_1mutex.html">mutex</a>(loop::token token, std::shared_ptr&lt;loop&gt; ref, <span class="keywordtype">bool</span> recursive = <span class="keyword">false</span>) <span class="keyword">noexcept</span>;</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <a class="code hl_class" href="classuvw_1_1mutex.html">~mutex</a>() <span class="keyword">noexcept</span>;</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> </div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"><a class="line" href="classuvw_1_1mutex.html#ac6b47d55690dc275cf39d1d839c5b685"> 194</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classuvw_1_1mutex.html#ac6b47d55690dc275cf39d1d839c5b685">lock</a>() noexcept;</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> </div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"><a class="line" href="classuvw_1_1mutex.html#a90a3c79c32fb93d9ce14f0610659c06f"> 200</a></span> <span class="keywordtype">bool</span> try_lock() noexcept;</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> </div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"><a class="line" href="classuvw_1_1mutex.html#a8750d217fed59b9fa4fb0e6398374746"> 205</a></span> <span class="keywordtype">void</span> unlock() noexcept;</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span>};</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> </div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"><a class="line" href="classuvw_1_1rwlock.html"> 211</a></span>class <a class="code hl_class" href="classuvw_1_1rwlock.html">rwlock</a> final: public <a class="code hl_struct" href="structuvw_1_1uv__type.html">uv_type</a>&lt;uv_rwlock_t&gt; {</div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="keyword">explicit</span> <a class="code hl_class" href="classuvw_1_1rwlock.html">rwlock</a>(loop::token token, std::shared_ptr&lt;loop&gt; ref) <span class="keyword">noexcept</span>;</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> </div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <a class="code hl_class" href="classuvw_1_1rwlock.html">~rwlock</a>() <span class="keyword">noexcept</span>;</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> </div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"><a class="line" href="classuvw_1_1rwlock.html#a48a2f73a53caecad83f82544bce5e754"> 220</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classuvw_1_1rwlock.html#a48a2f73a53caecad83f82544bce5e754">rdlock</a>() noexcept;</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> </div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"><a class="line" href="classuvw_1_1rwlock.html#a51e06cdde0ef98fcfd43d81db1cadf23"> 226</a></span> <span class="keywordtype">bool</span> try_rdlock() noexcept;</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> </div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"><a class="line" href="classuvw_1_1rwlock.html#ab5fb7747eddb48d8ff88d0ab266d9ef1"> 231</a></span> <span class="keywordtype">void</span> rdunlock() noexcept;</div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> </div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"><a class="line" href="classuvw_1_1rwlock.html#aacd6baeb68d2178665ce5bf331a4fd0a"> 236</a></span> <span class="keywordtype">void</span> wrlock() noexcept;</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> </div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"><a class="line" href="classuvw_1_1rwlock.html#a6692bdc0b55fe3416364ade16f53eff1"> 242</a></span> <span class="keywordtype">bool</span> try_wrlock() noexcept;</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> </div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"><a class="line" href="classuvw_1_1rwlock.html#a24419f230f193655cda30eafaf0f3070"> 247</a></span> <span class="keywordtype">void</span> wrunlock() noexcept;</div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span>};</div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> </div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"><a class="line" href="classuvw_1_1semaphore.html"> 257</a></span>class <a class="code hl_class" href="classuvw_1_1semaphore.html">semaphore</a> final: public <a class="code hl_struct" href="structuvw_1_1uv__type.html">uv_type</a>&lt;uv_sem_t&gt; {</div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> <span class="keyword">explicit</span> <a class="code hl_class" href="classuvw_1_1semaphore.html">semaphore</a>(loop::token token, std::shared_ptr&lt;loop&gt; ref, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> value) <span class="keyword">noexcept</span>;</div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> </div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> <a class="code hl_class" href="classuvw_1_1semaphore.html">~semaphore</a>() <span class="keyword">noexcept</span>;</div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> </div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"><a class="line" href="classuvw_1_1semaphore.html#a89fe830254e91604ffb40de8af552437"> 266</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classuvw_1_1semaphore.html#a89fe830254e91604ffb40de8af552437">post</a>() noexcept;</div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> </div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"><a class="line" href="classuvw_1_1semaphore.html#a78841fdd1d1a0fb050d73042e3cad799"> 271</a></span> <span class="keywordtype">void</span> wait() noexcept;</div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> </div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"><a class="line" href="classuvw_1_1semaphore.html#a5c2972fb3036956852f8d55dbcabec5f"> 277</a></span> <span class="keywordtype">bool</span> try_wait() noexcept;</div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span>};</div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> </div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"><a class="line" href="classuvw_1_1condition.html"> 283</a></span>class <a class="code hl_class" href="classuvw_1_1condition.html">condition</a> final: public <a class="code hl_struct" href="structuvw_1_1uv__type.html">uv_type</a>&lt;uv_cond_t&gt; {</div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> <span class="keyword">explicit</span> <a class="code hl_class" href="classuvw_1_1condition.html">condition</a>(loop::token token, std::shared_ptr&lt;loop&gt; ref) <span class="keyword">noexcept</span>;</div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> </div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> <a class="code hl_class" href="classuvw_1_1condition.html">~condition</a>() <span class="keyword">noexcept</span>;</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> </div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"><a class="line" href="classuvw_1_1condition.html#a02dfe50d273ed1263c839edb504213a0"> 295</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classuvw_1_1condition.html#a02dfe50d273ed1263c839edb504213a0">signal</a>() noexcept;</div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> </div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"><a class="line" href="classuvw_1_1condition.html#aba9e52349e417204c43b2383008ead7a"> 302</a></span> <span class="keywordtype">void</span> broadcast() noexcept;</div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> </div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"><a class="line" href="classuvw_1_1condition.html#a49753b61acdfbf76ba87b70d6f441289"> 313</a></span> <span class="keywordtype">void</span> wait(<a class="code hl_class" href="classuvw_1_1mutex.html">mutex</a> &amp;mtx) noexcept;</div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> </div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"><a class="line" href="classuvw_1_1condition.html#af1ca0e3ae4854fc8e16068922db667a4"> 330</a></span> <span class="keywordtype">bool</span> timed_wait(<a class="code hl_class" href="classuvw_1_1mutex.html">mutex</a> &amp;mtx, uint64_t timeout) noexcept;</div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span>};</div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> </div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"><a class="line" href="classuvw_1_1barrier.html"> 342</a></span>class <a class="code hl_class" href="classuvw_1_1barrier.html">barrier</a> final: public <a class="code hl_struct" href="structuvw_1_1uv__type.html">uv_type</a>&lt;uv_barrier_t&gt; {</div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> <span class="keyword">explicit</span> <a class="code hl_class" href="classuvw_1_1barrier.html">barrier</a>(loop::token token, std::shared_ptr&lt;loop&gt; ref, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count) <span class="keyword">noexcept</span>;</div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> </div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> <a class="code hl_class" href="classuvw_1_1barrier.html">~barrier</a>() <span class="keyword">noexcept</span>;</div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> </div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"><a class="line" href="classuvw_1_1barrier.html#a41911992bc4c06a947068a4bd12a0d1b"> 352</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classuvw_1_1barrier.html#a41911992bc4c06a947068a4bd12a0d1b">wait</a>() noexcept;</div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span>};</div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> </div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span>} <span class="comment">// namespace uvw</span></div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> </div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span><span class="preprocessor">#ifndef UVW_AS_LIB</span></div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span><span class="preprocessor"># include &quot;thread.cpp&quot;</span></div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> </div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span><span class="preprocessor">#endif </span><span class="comment">// UVW_THREAD_INCLUDE_H</span></div>
<div class="ttc" id="aclassuvw_1_1barrier_html"><div class="ttname"><a href="classuvw_1_1barrier.html">uvw::barrier</a></div><div class="ttdoc">The barrier wrapper.</div><div class="ttdef"><b>Definition:</b> <a href="thread_8h_source.html#l00342">thread.h:342</a></div></div>
<div class="ttc" id="aclassuvw_1_1barrier_html_a41911992bc4c06a947068a4bd12a0d1b"><div class="ttname"><a href="classuvw_1_1barrier.html#a41911992bc4c06a947068a4bd12a0d1b">uvw::barrier::wait</a></div><div class="ttdeci">bool wait() noexcept</div><div class="ttdoc">Synchronizes at a barrier.</div></div>
<div class="ttc" id="aclassuvw_1_1condition_html"><div class="ttname"><a href="classuvw_1_1condition.html">uvw::condition</a></div><div class="ttdoc">The condition wrapper.</div><div class="ttdef"><b>Definition:</b> <a href="thread_8h_source.html#l00283">thread.h:283</a></div></div>
<div class="ttc" id="aclassuvw_1_1condition_html_a02dfe50d273ed1263c839edb504213a0"><div class="ttname"><a href="classuvw_1_1condition.html#a02dfe50d273ed1263c839edb504213a0">uvw::condition::signal</a></div><div class="ttdeci">void signal() noexcept</div><div class="ttdoc">Signals a condition.</div></div>
<div class="ttc" id="aclassuvw_1_1mutex_html"><div class="ttname"><a href="classuvw_1_1mutex.html">uvw::mutex</a></div><div class="ttdoc">The mutex wrapper.</div><div class="ttdef"><b>Definition:</b> <a href="thread_8h_source.html#l00183">thread.h:183</a></div></div>
<div class="ttc" id="aclassuvw_1_1mutex_html_ac6b47d55690dc275cf39d1d839c5b685"><div class="ttname"><a href="classuvw_1_1mutex.html#ac6b47d55690dc275cf39d1d839c5b685">uvw::mutex::lock</a></div><div class="ttdeci">void lock() noexcept</div><div class="ttdoc">Locks the mutex.</div></div>
<div class="ttc" id="aclassuvw_1_1once_html"><div class="ttname"><a href="classuvw_1_1once.html">uvw::once</a></div><div class="ttdoc">The once wrapper.</div><div class="ttdef"><b>Definition:</b> <a href="thread_8h_source.html#l00151">thread.h:151</a></div></div>
<div class="ttc" id="aclassuvw_1_1once_html_a595b340d3b28f490d5e5cf8558ff8b09"><div class="ttname"><a href="classuvw_1_1once.html#a595b340d3b28f490d5e5cf8558ff8b09">uvw::once::run</a></div><div class="ttdeci">static void run(F &amp;&amp;f) noexcept</div><div class="ttdoc">Runs a function once and only once.</div><div class="ttdef"><b>Definition:</b> <a href="thread_8h_source.html#l00167">thread.h:167</a></div></div>
<div class="ttc" id="aclassuvw_1_1rwlock_html"><div class="ttname"><a href="classuvw_1_1rwlock.html">uvw::rwlock</a></div><div class="ttdoc">The rwlock wrapper.</div><div class="ttdef"><b>Definition:</b> <a href="thread_8h_source.html#l00211">thread.h:211</a></div></div>
<div class="ttc" id="aclassuvw_1_1rwlock_html_a48a2f73a53caecad83f82544bce5e754"><div class="ttname"><a href="classuvw_1_1rwlock.html#a48a2f73a53caecad83f82544bce5e754">uvw::rwlock::rdlock</a></div><div class="ttdeci">void rdlock() noexcept</div><div class="ttdoc">Locks a read-write lock object for reading.</div></div>
<div class="ttc" id="aclassuvw_1_1semaphore_html"><div class="ttname"><a href="classuvw_1_1semaphore.html">uvw::semaphore</a></div><div class="ttdoc">The semaphore wrapper.</div><div class="ttdef"><b>Definition:</b> <a href="thread_8h_source.html#l00257">thread.h:257</a></div></div>
<div class="ttc" id="aclassuvw_1_1semaphore_html_a89fe830254e91604ffb40de8af552437"><div class="ttname"><a href="classuvw_1_1semaphore.html#a89fe830254e91604ffb40de8af552437">uvw::semaphore::post</a></div><div class="ttdeci">void post() noexcept</div><div class="ttdoc">Unlocks a semaphore.</div></div>
<div class="ttc" id="aclassuvw_1_1thread__local__storage_html"><div class="ttname"><a href="classuvw_1_1thread__local__storage.html">uvw::thread_local_storage</a></div><div class="ttdoc">The thread local storage wrapper.</div><div class="ttdef"><b>Definition:</b> <a href="thread_8h_source.html#l00118">thread.h:118</a></div></div>
<div class="ttc" id="aclassuvw_1_1thread__local__storage_html_a26c56634e5d158b79a8fc2d408c745b7"><div class="ttname"><a href="classuvw_1_1thread__local__storage.html#a26c56634e5d158b79a8fc2d408c745b7">uvw::thread_local_storage::get</a></div><div class="ttdeci">T * get() noexcept</div><div class="ttdoc">Gets the value of a given variable.</div><div class="ttdef"><b>Definition:</b> <a href="thread_8h_source.html#l00130">thread.h:130</a></div></div>
<div class="ttc" id="aclassuvw_1_1thread__local__storage_html_accca7eed5946e0c21d5f4f256ba899b5"><div class="ttname"><a href="classuvw_1_1thread__local__storage.html#accca7eed5946e0c21d5f4f256ba899b5">uvw::thread_local_storage::set</a></div><div class="ttdeci">void set(T *value) noexcept</div><div class="ttdoc">Sets the value of a given variable.</div><div class="ttdef"><b>Definition:</b> <a href="thread_8h_source.html#l00140">thread.h:140</a></div></div>
<div class="ttc" id="aclassuvw_1_1thread_html"><div class="ttname"><a href="classuvw_1_1thread.html">uvw::thread</a></div><div class="ttdoc">The thread wrapper.</div><div class="ttdef"><b>Definition:</b> <a href="thread_8h_source.html#l00045">thread.h:45</a></div></div>
<div class="ttc" id="aclassuvw_1_1thread_html_a148dc9a339fe0f610a57dabf17b4f420"><div class="ttname"><a href="classuvw_1_1thread.html#a148dc9a339fe0f610a57dabf17b4f420">uvw::thread::self</a></div><div class="ttdeci">static type self() noexcept</div><div class="ttdoc">Obtains the identifier of the calling thread.</div></div>
<div class="ttc" id="aclassuvw_1_1thread_html_a9cf983df5ed1950322e1194a110c1df5"><div class="ttname"><a href="classuvw_1_1thread.html#a9cf983df5ed1950322e1194a110c1df5">uvw::thread::getcpu</a></div><div class="ttdeci">static int getcpu() noexcept</div><div class="ttdoc">Gets the CPU number on which the calling thread is running.</div></div>
<div class="ttc" id="aclassuvw_1_1thread_html_abc4cd4285f800475959668bb4f49201d"><div class="ttname"><a href="classuvw_1_1thread.html#abc4cd4285f800475959668bb4f49201d">uvw::thread::equal</a></div><div class="ttdeci">static bool equal(const thread &amp;tl, const thread &amp;tr) noexcept</div><div class="ttdoc">Compares thread by means of their identifiers.</div></div>
<div class="ttc" id="aclassuvw_1_1thread_html_acfc275f0f1776cc8bc94540649099d0f"><div class="ttname"><a href="classuvw_1_1thread.html#acfc275f0f1776cc8bc94540649099d0f">uvw::thread::join</a></div><div class="ttdeci">bool join() noexcept</div><div class="ttdoc">Joins with a terminated thread.</div></div>
<div class="ttc" id="aclassuvw_1_1thread_html_aed8c11f06ad88681453bb79e07605049"><div class="ttname"><a href="classuvw_1_1thread.html#aed8c11f06ad88681453bb79e07605049">uvw::thread::run</a></div><div class="ttdeci">bool run() noexcept</div><div class="ttdoc">Creates a new thread.</div></div>
<div class="ttc" id="anamespaceuvw_html"><div class="ttname"><a href="namespaceuvw.html">uvw</a></div><div class="ttdoc">uvw default namespace.</div><div class="ttdef"><b>Definition:</b> <a href="async_8h_source.html#l00008">async.h:8</a></div></div>
<div class="ttc" id="astructuvw_1_1uv__type_html"><div class="ttname"><a href="structuvw_1_1uv__type.html">uvw::uv_type</a></div><div class="ttdoc">Wrapper class for underlying types.</div><div class="ttdef"><b>Definition:</b> <a href="uv__type_8hpp_source.html#l00018">uv_type.hpp:18</a></div></div>
<div class="ttc" id="astructuvw_1_1uv__type_html_a06a6cb7ebde27aa348e340b76e49c6ae"><div class="ttname"><a href="structuvw_1_1uv__type.html#a06a6cb7ebde27aa348e340b76e49c6ae">uvw::uv_type::raw</a></div><div class="ttdeci">const U * raw() const noexcept</div><div class="ttdoc">Gets the underlying raw data structure.</div><div class="ttdef"><b>Definition:</b> <a href="uv__type_8hpp_source.html#l00059">uv_type.hpp:59</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.6
</small></address>
</body>
</html>