mirror of
https://github.com/seigler/dash-docs
synced 2025-07-27 17:56:16 +00:00
150 lines
64 KiB
HTML
150 lines
64 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
|
<meta name="generator" content="Doxygen 1.8.14"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
<title>Dash Core: src/sync.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="navtree.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="resize.js"></script>
|
|
<script type="text/javascript" src="navtreedata.js"></script>
|
|
<script type="text/javascript" src="navtree.js"></script>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
$(document).ready(initResizable);
|
|
/* @license-end */</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 style="height: 56px;">
|
|
<td id="projectlogo"><img alt="Logo" src="bitcoin_logo_doxygen.png"/></td>
|
|
<td id="projectalign" style="padding-left: 0.5em;">
|
|
<div id="projectname">Dash Core
|
|
 <span id="projectnumber">0.12.2.1</span>
|
|
</div>
|
|
<div id="projectbrief">P2P Digital Currency</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<!-- end header part -->
|
|
<!-- Generated by Doxygen 1.8.14 -->
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|
/* @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:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
$(function() {
|
|
initMenu('',true,false,'search.php','Search');
|
|
$(document).ready(function() { init_search(); });
|
|
});
|
|
/* @license-end */</script>
|
|
<div id="main-nav"></div>
|
|
</div><!-- top -->
|
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
|
<div id="nav-tree">
|
|
<div id="nav-tree-contents">
|
|
<div id="nav-sync" class="sync"></div>
|
|
</div>
|
|
</div>
|
|
<div id="splitbar" style="-moz-user-select:none;"
|
|
class="ui-resizable-handle">
|
|
</div>
|
|
</div>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
$(document).ready(function(){initNavTree('sync_8h_source.html','');});
|
|
/* @license-end */
|
|
</script>
|
|
<div id="doc-content">
|
|
<!-- 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">
|
|
<iframe src="javascript:void(0)" frameborder="0"
|
|
name="MSearchResults" id="MSearchResults">
|
|
</iframe>
|
|
</div>
|
|
|
|
<div class="header">
|
|
<div class="headertitle">
|
|
<div class="title">sync.h</div> </div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
<a href="sync_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">// Copyright (c) 2009-2010 Satoshi Nakamoto</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">// Copyright (c) 2009-2015 The Bitcoin Core developers</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// Distributed under the MIT software license, see the accompanying</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// file COPYING or http://www.opensource.org/licenses/mit-license.php.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> </div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#ifndef BITCOIN_SYNC_H</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#define BITCOIN_SYNC_H</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include "<a class="code" href="threadsafety_8h.html">threadsafety.h</a>"</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> </div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include <boost/thread/condition_variable.hpp></span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include <boost/thread/locks.hpp></span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include <boost/thread/mutex.hpp></span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include <boost/thread/recursive_mutex.hpp></span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// //</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// THE SIMPLE DEFINITION, EXCLUDING DEBUG CODE //</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">// //</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"></span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">CCriticalSection mutex;</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> boost::recursive_mutex mutex;</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"></span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment">LOCK(mutex);</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> boost::unique_lock<boost::recursive_mutex> criticalblock(mutex);</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"></span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment">LOCK2(mutex1, mutex2);</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"> boost::unique_lock<boost::recursive_mutex> criticalblock1(mutex1);</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment"> boost::unique_lock<boost::recursive_mutex> criticalblock2(mutex2);</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment"></span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment">TRY_LOCK(mutex, name);</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="comment"> boost::unique_lock<boost::recursive_mutex> name(mutex, boost::try_to_lock_t);</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="comment"></span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment">ENTER_CRITICAL_SECTION(mutex); // no RAII</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="comment"> mutex.lock();</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment"></span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="comment">LEAVE_CRITICAL_SECTION(mutex); // no RAII</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment"> mutex.unlock();</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="comment"> */</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="comment">// //</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment">// THE ACTUAL IMPLEMENTATION //</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment">// //</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment"></span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">template</span> <<span class="keyword">typename</span> PARENT></div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classAnnotatedMixin.html"> 55</a></span> <span class="keyword">class </span><a class="code" href="threadsafety_8h.html#a9ce9440fc9b6862f43af10b70769f914">LOCKABLE</a> <a class="code" href="classAnnotatedMixin.html">AnnotatedMixin</a> : <span class="keyword">public</span> PARENT</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> {</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classAnnotatedMixin.html#ad1f35c6d1b8a8e980fff45e7e7cb46d3"> 58</a></span>  <span class="keywordtype">void</span> <a class="code" href="classAnnotatedMixin.html#ad1f35c6d1b8a8e980fff45e7e7cb46d3">lock</a>() <a class="code" href="threadsafety_8h.html#a77729163b7f6867da40ad5daa5f926f3">EXCLUSIVE_LOCK_FUNCTION</a>()</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  PARENT::lock();</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  }</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classAnnotatedMixin.html#acc2e3da37c2d9dd483b859572e32bc24"> 63</a></span>  <span class="keywordtype">void</span> <a class="code" href="classAnnotatedMixin.html#acc2e3da37c2d9dd483b859572e32bc24">unlock</a>() <a class="code" href="threadsafety_8h.html#abd56e19f9b4781b1a5212a46951cf5c3">UNLOCK_FUNCTION</a>()</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  {</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  PARENT::unlock();</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="classAnnotatedMixin.html#a9a33deab2da56790d8b5d30b1fd8350d"> 68</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classAnnotatedMixin.html#a9a33deab2da56790d8b5d30b1fd8350d">try_lock</a>() <a class="code" href="threadsafety_8h.html#a3c67d370ed1f55064d85e01076aad534">EXCLUSIVE_TRYLOCK_FUNCTION</a>(true)</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">return</span> PARENT::try_lock();</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  }</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> };</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="sync_8h.html#a37a4692b2d517f2843655ca11af7668a"> 78</a></span> <span class="keyword">typedef</span> <a class="code" href="classAnnotatedMixin.html">AnnotatedMixin<boost::recursive_mutex></a> <a class="code" href="sync_8h.html#a37a4692b2d517f2843655ca11af7668a">CCriticalSection</a>;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="sync_8h.html#a341e0aa38106c4dbcedbba878dceb1a5"> 81</a></span> <span class="keyword">typedef</span> <a class="code" href="classAnnotatedMixin.html">AnnotatedMixin<boost::mutex></a> <a class="code" href="sync_8h.html#a341e0aa38106c4dbcedbba878dceb1a5">CWaitableCriticalSection</a>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div><div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="sync_8h.html#acdd2020d08e99abd9504ea67d0190520"> 84</a></span> <span class="keyword">typedef</span> boost::condition_variable <a class="code" href="sync_8h.html#acdd2020d08e99abd9504ea67d0190520">CConditionVariable</a>;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="preprocessor">#ifdef DEBUG_LOCKORDER</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">void</span> <a class="code" href="sync_8h.html#afc02589835b058cee9b180e89ee234c9">EnterCritical</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* pszName, <span class="keyword">const</span> <span class="keywordtype">char</span>* pszFile, <span class="keywordtype">int</span> nLine, <span class="keywordtype">void</span>* cs, <span class="keywordtype">bool</span> fTry = <span class="keyword">false</span>);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keywordtype">void</span> <a class="code" href="sync_8h.html#a222f17e7a4e1fb9bb5a36fe9aca460b8">LeaveCritical</a>();</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> std::string LocksHeld();</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">void</span> <a class="code" href="sync_8h.html#a02dcb9057e60696179d85668ca6be50e">AssertLockHeldInternal</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* pszName, <span class="keyword">const</span> <span class="keywordtype">char</span>* pszFile, <span class="keywordtype">int</span> nLine, <span class="keywordtype">void</span>* cs);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="sync_8h.html#afc02589835b058cee9b180e89ee234c9"> 92</a></span> <span class="keywordtype">void</span> <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="sync_8h.html#afc02589835b058cee9b180e89ee234c9">EnterCritical</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* pszName, <span class="keyword">const</span> <span class="keywordtype">char</span>* pszFile, <span class="keywordtype">int</span> nLine, <span class="keywordtype">void</span>* cs, <span class="keywordtype">bool</span> fTry = <span class="keyword">false</span>) {}</div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="sync_8h.html#a222f17e7a4e1fb9bb5a36fe9aca460b8"> 93</a></span> <span class="keywordtype">void</span> <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="sync_8h.html#a222f17e7a4e1fb9bb5a36fe9aca460b8">LeaveCritical</a>() {}</div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="sync_8h.html#a02dcb9057e60696179d85668ca6be50e"> 94</a></span> <span class="keywordtype">void</span> <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="sync_8h.html#a02dcb9057e60696179d85668ca6be50e">AssertLockHeldInternal</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* pszName, <span class="keyword">const</span> <span class="keywordtype">char</span>* pszFile, <span class="keywordtype">int</span> nLine, <span class="keywordtype">void</span>* cs) {}</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="sync_8h.html#acd61d0cb3b49f367728193720014aed0"> 96</a></span> <span class="preprocessor">#define AssertLockHeld(cs) AssertLockHeldInternal(#cs, __FILE__, __LINE__, &cs)</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="preprocessor">#ifdef DEBUG_LOCKCONTENTION</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="keywordtype">void</span> PrintLockContention(<span class="keyword">const</span> <span class="keywordtype">char</span>* pszName, <span class="keyword">const</span> <span class="keywordtype">char</span>* pszFile, <span class="keywordtype">int</span> nLine);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Mutex></div><div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="classCMutexLock.html"> 104</a></span> <span class="keyword">class </span><a class="code" href="threadsafety_8h.html#a954d07e5a857905a2f333504beacef0d">SCOPED_LOCKABLE</a> <a class="code" href="classCMutexLock.html">CMutexLock</a></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="classCMutexLock.html#a2f3b4666271388be42da0198ba717744"> 107</a></span>  boost::unique_lock<Mutex> <a class="code" href="classCMutexLock.html#a2f3b4666271388be42da0198ba717744">lock</a>;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="classCMutexLock.html#a8a9f734c76f1b766445bec41b91393dd"> 109</a></span>  <span class="keywordtype">void</span> <a class="code" href="classCMutexLock.html#a8a9f734c76f1b766445bec41b91393dd">Enter</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* pszName, <span class="keyword">const</span> <span class="keywordtype">char</span>* pszFile, <span class="keywordtype">int</span> nLine)</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  {</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <a class="code" href="sync_8h.html#afc02589835b058cee9b180e89ee234c9">EnterCritical</a>(pszName, pszFile, nLine, (<span class="keywordtype">void</span>*)(lock.mutex()));</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="preprocessor">#ifdef DEBUG_LOCKCONTENTION</span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keywordflow">if</span> (!lock.try_lock()) {</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  PrintLockContention(pszName, pszFile, nLine);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  lock.lock();</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="preprocessor">#ifdef DEBUG_LOCKCONTENTION</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  }</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div><div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="classCMutexLock.html#a9ba3770fa3e256a183b0ee52ebf048c4"> 122</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classCMutexLock.html#a9ba3770fa3e256a183b0ee52ebf048c4">TryEnter</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* pszName, <span class="keyword">const</span> <span class="keywordtype">char</span>* pszFile, <span class="keywordtype">int</span> nLine)</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <a class="code" href="sync_8h.html#afc02589835b058cee9b180e89ee234c9">EnterCritical</a>(pszName, pszFile, nLine, (<span class="keywordtype">void</span>*)(lock.mutex()), <span class="keyword">true</span>);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  lock.try_lock();</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">if</span> (!lock.owns_lock())</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <a class="code" href="sync_8h.html#a222f17e7a4e1fb9bb5a36fe9aca460b8">LeaveCritical</a>();</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">return</span> lock.owns_lock();</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="classCMutexLock.html#a5de553653dbbcc1432d07658fa9b0e8b"> 132</a></span>  <a class="code" href="classCMutexLock.html#a5de553653dbbcc1432d07658fa9b0e8b">CMutexLock</a>(Mutex& mutexIn, <span class="keyword">const</span> <span class="keywordtype">char</span>* pszName, <span class="keyword">const</span> <span class="keywordtype">char</span>* pszFile, <span class="keywordtype">int</span> nLine, <span class="keywordtype">bool</span> fTry = <span class="keyword">false</span>) <a class="code" href="threadsafety_8h.html#a77729163b7f6867da40ad5daa5f926f3">EXCLUSIVE_LOCK_FUNCTION</a>(mutexIn) : lock(mutexIn, <a class="code" href="namespaceboost.html">boost</a>::defer_lock)</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  {</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">if</span> (fTry)</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  TryEnter(pszName, pszFile, nLine);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  Enter(pszName, pszFile, nLine);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  }</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div><div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="classCMutexLock.html#a4725b7154d87d0e0eb47c62d299963be"> 140</a></span>  <a class="code" href="classCMutexLock.html#a4725b7154d87d0e0eb47c62d299963be">CMutexLock</a>(Mutex* pmutexIn, <span class="keyword">const</span> <span class="keywordtype">char</span>* pszName, <span class="keyword">const</span> <span class="keywordtype">char</span>* pszFile, <span class="keywordtype">int</span> nLine, <span class="keywordtype">bool</span> fTry = <span class="keyword">false</span>) <a class="code" href="threadsafety_8h.html#a77729163b7f6867da40ad5daa5f926f3">EXCLUSIVE_LOCK_FUNCTION</a>(pmutexIn)</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordflow">if</span> (!pmutexIn) <span class="keywordflow">return</span>;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  lock = boost::unique_lock<Mutex>(*pmutexIn, boost::defer_lock);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">if</span> (fTry)</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  TryEnter(pszName, pszFile, nLine);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  Enter(pszName, pszFile, nLine);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div><div class="line"><a name="l00151"></a><span class="lineno"><a class="line" href="classCMutexLock.html#af475e374b70ac03db516d00f65b723b7"> 151</a></span>  <a class="code" href="classCMutexLock.html#af475e374b70ac03db516d00f65b723b7">~CMutexLock</a>() <a class="code" href="threadsafety_8h.html#abd56e19f9b4781b1a5212a46951cf5c3">UNLOCK_FUNCTION</a>()</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  {</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordflow">if</span> (lock.owns_lock())</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <a class="code" href="sync_8h.html#a222f17e7a4e1fb9bb5a36fe9aca460b8">LeaveCritical</a>();</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  }</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div><div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="classCMutexLock.html#a4358803c87a873252abebdd1b625d293"> 157</a></span>  <span class="keyword">operator</span> bool()</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  {</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">return</span> lock.owns_lock();</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  }</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span> };</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div><div class="line"><a name="l00163"></a><span class="lineno"><a class="line" href="sync_8h.html#a8a4a73fdc781f3f58f9729fce8b7d13c"> 163</a></span> <span class="keyword">typedef</span> <a class="code" href="classCMutexLock.html">CMutexLock<CCriticalSection></a> <a class="code" href="sync_8h.html#a8a4a73fdc781f3f58f9729fce8b7d13c">CCriticalBlock</a>;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div><div class="line"><a name="l00165"></a><span class="lineno"><a class="line" href="sync_8h.html#a9ac9dd35b93432c0b194466d2aa84788"> 165</a></span> <span class="preprocessor">#define PASTE(x, y) x ## y</span></div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="sync_8h.html#ad6f41535a782a4507947186ddcd56062"> 166</a></span> <span class="preprocessor">#define PASTE2(x, y) PASTE(x, y)</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div><div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="sync_8h.html#a911fe23f057c2fe5aad629162d6c99d0"> 168</a></span> <span class="preprocessor">#define LOCK(cs) CCriticalBlock PASTE2(criticalblock, __COUNTER__)(cs, #cs, __FILE__, __LINE__)</span></div><div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="sync_8h.html#a35644e2b75a93da0cb0f6c768f34efa8"> 169</a></span> <span class="preprocessor">#define LOCK2(cs1, cs2) CCriticalBlock criticalblock1(cs1, #cs1, __FILE__, __LINE__), criticalblock2(cs2, #cs2, __FILE__, __LINE__)</span></div><div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="sync_8h.html#aca08e7299069c2d60b8aa726fc550612"> 170</a></span> <span class="preprocessor">#define TRY_LOCK(cs, name) CCriticalBlock name(cs, #cs, __FILE__, __LINE__, true)</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div><div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="sync_8h.html#a1262d24e5b9a4fa0a1adc4de02958efb"> 172</a></span> <span class="preprocessor">#define ENTER_CRITICAL_SECTION(cs) \</span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="preprocessor"> { \</span></div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="preprocessor"> EnterCritical(#cs, __FILE__, __LINE__, (void*)(&cs)); \</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="preprocessor"> (cs).lock(); \</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="preprocessor"> }</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div><div class="line"><a name="l00178"></a><span class="lineno"><a class="line" href="sync_8h.html#a2b89bac48633dc1532691f1106a55f6c"> 178</a></span> <span class="preprocessor">#define LEAVE_CRITICAL_SECTION(cs) \</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="preprocessor"> { \</span></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="preprocessor"> (cs).unlock(); \</span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="preprocessor"> LeaveCritical(); \</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="preprocessor"> }</span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="classCSemaphore.html"> 184</a></span> <span class="keyword">class </span><a class="code" href="classCSemaphore.html">CSemaphore</a></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00187"></a><span class="lineno"><a class="line" href="classCSemaphore.html#afe13b8e59776248a0c49f9f2b31107fb"> 187</a></span>  boost::condition_variable <a class="code" href="classCSemaphore.html#afe13b8e59776248a0c49f9f2b31107fb">condition</a>;</div><div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="classCSemaphore.html#ac871c4228d6a9b7f67f340ba693a629d"> 188</a></span>  boost::mutex <a class="code" href="classCSemaphore.html#ac871c4228d6a9b7f67f340ba693a629d">mutex</a>;</div><div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="classCSemaphore.html#a22a51512b911d93b37411cfffc764303"> 189</a></span>  <span class="keywordtype">int</span> <a class="code" href="classCSemaphore.html#a22a51512b911d93b37411cfffc764303">value</a>;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> </div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="classCSemaphore.html#ac9cc749c7424852d7fb4378811d0dae1"> 192</a></span>  <a class="code" href="classCSemaphore.html#ac9cc749c7424852d7fb4378811d0dae1">CSemaphore</a>(<span class="keywordtype">int</span> init) : <a class="code" href="classCSemaphore.html#a22a51512b911d93b37411cfffc764303">value</a>(init) {}</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div><div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="classCSemaphore.html#a1c108bd981fe68527ec8ef5e7b0d116c"> 194</a></span>  <span class="keywordtype">void</span> <a class="code" href="classCSemaphore.html#a1c108bd981fe68527ec8ef5e7b0d116c">wait</a>()</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  {</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  boost::unique_lock<boost::mutex> lock(<a class="code" href="classCSemaphore.html#ac871c4228d6a9b7f67f340ba693a629d">mutex</a>);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordflow">while</span> (<a class="code" href="classCSemaphore.html#a22a51512b911d93b37411cfffc764303">value</a> < 1) {</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <a class="code" href="classCSemaphore.html#afe13b8e59776248a0c49f9f2b31107fb">condition</a>.wait(lock);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  }</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <a class="code" href="classCSemaphore.html#a22a51512b911d93b37411cfffc764303">value</a>--;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div><div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="classCSemaphore.html#abb8a07e6cac29dc72f044cd536a9f9e5"> 203</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classCSemaphore.html#abb8a07e6cac29dc72f044cd536a9f9e5">try_wait</a>()</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  {</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  boost::unique_lock<boost::mutex> lock(<a class="code" href="classCSemaphore.html#ac871c4228d6a9b7f67f340ba693a629d">mutex</a>);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keywordflow">if</span> (<a class="code" href="classCSemaphore.html#a22a51512b911d93b37411cfffc764303">value</a> < 1)</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <a class="code" href="classCSemaphore.html#a22a51512b911d93b37411cfffc764303">value</a>--;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  }</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div><div class="line"><a name="l00212"></a><span class="lineno"><a class="line" href="classCSemaphore.html#af6a956f6c191e824485fd3af6db39318"> 212</a></span>  <span class="keywordtype">void</span> <a class="code" href="classCSemaphore.html#af6a956f6c191e824485fd3af6db39318">post</a>()</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  {</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  {</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  boost::unique_lock<boost::mutex> lock(<a class="code" href="classCSemaphore.html#ac871c4228d6a9b7f67f340ba693a629d">mutex</a>);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <a class="code" href="classCSemaphore.html#a22a51512b911d93b37411cfffc764303">value</a>++;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <a class="code" href="classCSemaphore.html#afe13b8e59776248a0c49f9f2b31107fb">condition</a>.notify_one();</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  }</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> };</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div><div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="classCSemaphoreGrant.html"> 223</a></span> <span class="keyword">class </span><a class="code" href="classCSemaphoreGrant.html">CSemaphoreGrant</a></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span> {</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00226"></a><span class="lineno"><a class="line" href="classCSemaphoreGrant.html#afed7f1f7ac912c175dcd9c898fa4e2ed"> 226</a></span>  <a class="code" href="classCSemaphore.html">CSemaphore</a>* <a class="code" href="classCSemaphoreGrant.html#afed7f1f7ac912c175dcd9c898fa4e2ed">sem</a>;</div><div class="line"><a name="l00227"></a><span class="lineno"><a class="line" href="classCSemaphoreGrant.html#a0c416dd364ca4d085555d69658c060e3"> 227</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classCSemaphoreGrant.html#a0c416dd364ca4d085555d69658c060e3">fHaveGrant</a>;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00230"></a><span class="lineno"><a class="line" href="classCSemaphoreGrant.html#ac52976968379ea8e2470cfba877c3e89"> 230</a></span>  <span class="keywordtype">void</span> <a class="code" href="classCSemaphoreGrant.html#ac52976968379ea8e2470cfba877c3e89">Acquire</a>()</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  {</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">if</span> (<a class="code" href="classCSemaphoreGrant.html#a0c416dd364ca4d085555d69658c060e3">fHaveGrant</a>)</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <a class="code" href="classCSemaphoreGrant.html#afed7f1f7ac912c175dcd9c898fa4e2ed">sem</a>-><a class="code" href="classCSemaphore.html#a1c108bd981fe68527ec8ef5e7b0d116c">wait</a>();</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <a class="code" href="classCSemaphoreGrant.html#a0c416dd364ca4d085555d69658c060e3">fHaveGrant</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  }</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div><div class="line"><a name="l00238"></a><span class="lineno"><a class="line" href="classCSemaphoreGrant.html#a8d985eeace74e037baeb39bd2d586576"> 238</a></span>  <span class="keywordtype">void</span> <a class="code" href="classCSemaphoreGrant.html#a8d985eeace74e037baeb39bd2d586576">Release</a>()</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  {</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="keywordflow">if</span> (!<a class="code" href="classCSemaphoreGrant.html#a0c416dd364ca4d085555d69658c060e3">fHaveGrant</a>)</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <a class="code" href="classCSemaphoreGrant.html#afed7f1f7ac912c175dcd9c898fa4e2ed">sem</a>-><a class="code" href="classCSemaphore.html#af6a956f6c191e824485fd3af6db39318">post</a>();</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <a class="code" href="classCSemaphoreGrant.html#a0c416dd364ca4d085555d69658c060e3">fHaveGrant</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  }</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span> </div><div class="line"><a name="l00246"></a><span class="lineno"><a class="line" href="classCSemaphoreGrant.html#a9952d9ea087ced803c099f69992ebb1d"> 246</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classCSemaphoreGrant.html#a9952d9ea087ced803c099f69992ebb1d">TryAcquire</a>()</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  {</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keywordflow">if</span> (!<a class="code" href="classCSemaphoreGrant.html#a0c416dd364ca4d085555d69658c060e3">fHaveGrant</a> && <a class="code" href="classCSemaphoreGrant.html#afed7f1f7ac912c175dcd9c898fa4e2ed">sem</a>-><a class="code" href="classCSemaphore.html#abb8a07e6cac29dc72f044cd536a9f9e5">try_wait</a>())</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <a class="code" href="classCSemaphoreGrant.html#a0c416dd364ca4d085555d69658c060e3">fHaveGrant</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keywordflow">return</span> <a class="code" href="classCSemaphoreGrant.html#a0c416dd364ca4d085555d69658c060e3">fHaveGrant</a>;</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  }</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span> </div><div class="line"><a name="l00253"></a><span class="lineno"><a class="line" href="classCSemaphoreGrant.html#ab3e6f84f304703abc52517b0c8de26cf"> 253</a></span>  <span class="keywordtype">void</span> <a class="code" href="classCSemaphoreGrant.html#ab3e6f84f304703abc52517b0c8de26cf">MoveTo</a>(<a class="code" href="classCSemaphoreGrant.html">CSemaphoreGrant</a>& grant)</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  {</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  grant.<a class="code" href="classCSemaphoreGrant.html#a8d985eeace74e037baeb39bd2d586576">Release</a>();</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  grant.<a class="code" href="classCSemaphoreGrant.html#afed7f1f7ac912c175dcd9c898fa4e2ed">sem</a> = <a class="code" href="classCSemaphoreGrant.html#afed7f1f7ac912c175dcd9c898fa4e2ed">sem</a>;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  grant.<a class="code" href="classCSemaphoreGrant.html#a0c416dd364ca4d085555d69658c060e3">fHaveGrant</a> = <a class="code" href="classCSemaphoreGrant.html#a0c416dd364ca4d085555d69658c060e3">fHaveGrant</a>;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <a class="code" href="classCSemaphoreGrant.html#afed7f1f7ac912c175dcd9c898fa4e2ed">sem</a> = NULL;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <a class="code" href="classCSemaphoreGrant.html#a0c416dd364ca4d085555d69658c060e3">fHaveGrant</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  }</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div><div class="line"><a name="l00262"></a><span class="lineno"><a class="line" href="classCSemaphoreGrant.html#a84ca79a4c8519f1a69697c060cabc51d"> 262</a></span>  <a class="code" href="classCSemaphoreGrant.html#a84ca79a4c8519f1a69697c060cabc51d">CSemaphoreGrant</a>() : <a class="code" href="classCSemaphoreGrant.html#afed7f1f7ac912c175dcd9c898fa4e2ed">sem</a>(NULL), <a class="code" href="classCSemaphoreGrant.html#a0c416dd364ca4d085555d69658c060e3">fHaveGrant</a>(false) {}</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div><div class="line"><a name="l00264"></a><span class="lineno"><a class="line" href="classCSemaphoreGrant.html#a5998c457c7c223a8257166161d12b355"> 264</a></span>  <a class="code" href="classCSemaphoreGrant.html#a5998c457c7c223a8257166161d12b355">CSemaphoreGrant</a>(<a class="code" href="classCSemaphore.html">CSemaphore</a>& sema, <span class="keywordtype">bool</span> fTry = <span class="keyword">false</span>) : <a class="code" href="classCSemaphoreGrant.html#afed7f1f7ac912c175dcd9c898fa4e2ed">sem</a>(&sema), <a class="code" href="classCSemaphoreGrant.html#a0c416dd364ca4d085555d69658c060e3">fHaveGrant</a>(false)</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  {</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keywordflow">if</span> (fTry)</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <a class="code" href="classCSemaphoreGrant.html#a9952d9ea087ced803c099f69992ebb1d">TryAcquire</a>();</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <a class="code" href="classCSemaphoreGrant.html#ac52976968379ea8e2470cfba877c3e89">Acquire</a>();</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  }</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div><div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="classCSemaphoreGrant.html#aaba5579eb3ad3647d79e71c9970dcb54"> 272</a></span>  <a class="code" href="classCSemaphoreGrant.html#aaba5579eb3ad3647d79e71c9970dcb54">~CSemaphoreGrant</a>()</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  {</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <a class="code" href="classCSemaphoreGrant.html#a8d985eeace74e037baeb39bd2d586576">Release</a>();</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  }</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div><div class="line"><a name="l00277"></a><span class="lineno"><a class="line" href="classCSemaphoreGrant.html#a91458b860e45949d87d770252e590a9b"> 277</a></span>  <span class="keyword">operator</span> bool()</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  {</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keywordflow">return</span> <a class="code" href="classCSemaphoreGrant.html#a0c416dd364ca4d085555d69658c060e3">fHaveGrant</a>;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  }</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span> };</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="preprocessor">#endif // BITCOIN_SYNC_H</span></div><div class="ttc" id="threadsafety_8h_html_a77729163b7f6867da40ad5daa5f926f3"><div class="ttname"><a href="threadsafety_8h.html#a77729163b7f6867da40ad5daa5f926f3">EXCLUSIVE_LOCK_FUNCTION</a></div><div class="ttdeci">#define EXCLUSIVE_LOCK_FUNCTION(...)</div><div class="ttdef"><b>Definition:</b> <a href="threadsafety_8h_source.html#l00043">threadsafety.h:43</a></div></div>
|
|
<div class="ttc" id="classCSemaphoreGrant_html_ac52976968379ea8e2470cfba877c3e89"><div class="ttname"><a href="classCSemaphoreGrant.html#ac52976968379ea8e2470cfba877c3e89">CSemaphoreGrant::Acquire</a></div><div class="ttdeci">void Acquire()</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00230">sync.h:230</a></div></div>
|
|
<div class="ttc" id="sync_8h_html_acdd2020d08e99abd9504ea67d0190520"><div class="ttname"><a href="sync_8h.html#acdd2020d08e99abd9504ea67d0190520">CConditionVariable</a></div><div class="ttdeci">boost::condition_variable CConditionVariable</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00084">sync.h:84</a></div></div>
|
|
<div class="ttc" id="classCSemaphoreGrant_html_a8d985eeace74e037baeb39bd2d586576"><div class="ttname"><a href="classCSemaphoreGrant.html#a8d985eeace74e037baeb39bd2d586576">CSemaphoreGrant::Release</a></div><div class="ttdeci">void Release()</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00238">sync.h:238</a></div></div>
|
|
<div class="ttc" id="classCSemaphoreGrant_html_aaba5579eb3ad3647d79e71c9970dcb54"><div class="ttname"><a href="classCSemaphoreGrant.html#aaba5579eb3ad3647d79e71c9970dcb54">CSemaphoreGrant::~CSemaphoreGrant</a></div><div class="ttdeci">~CSemaphoreGrant()</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00272">sync.h:272</a></div></div>
|
|
<div class="ttc" id="classCSemaphoreGrant_html_ab3e6f84f304703abc52517b0c8de26cf"><div class="ttname"><a href="classCSemaphoreGrant.html#ab3e6f84f304703abc52517b0c8de26cf">CSemaphoreGrant::MoveTo</a></div><div class="ttdeci">void MoveTo(CSemaphoreGrant &grant)</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00253">sync.h:253</a></div></div>
|
|
<div class="ttc" id="namespaceboost_html"><div class="ttname"><a href="namespaceboost.html">boost</a></div><div class="ttdef"><b>Definition:</b> <a href="init_8h_source.html#l00014">init.h:14</a></div></div>
|
|
<div class="ttc" id="classCMutexLock_html_a2f3b4666271388be42da0198ba717744"><div class="ttname"><a href="classCMutexLock.html#a2f3b4666271388be42da0198ba717744">CMutexLock::lock</a></div><div class="ttdeci">boost::unique_lock< Mutex > lock</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00107">sync.h:107</a></div></div>
|
|
<div class="ttc" id="classCSemaphoreGrant_html_a0c416dd364ca4d085555d69658c060e3"><div class="ttname"><a href="classCSemaphoreGrant.html#a0c416dd364ca4d085555d69658c060e3">CSemaphoreGrant::fHaveGrant</a></div><div class="ttdeci">bool fHaveGrant</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00227">sync.h:227</a></div></div>
|
|
<div class="ttc" id="classCMutexLock_html_a8a9f734c76f1b766445bec41b91393dd"><div class="ttname"><a href="classCMutexLock.html#a8a9f734c76f1b766445bec41b91393dd">CMutexLock::Enter</a></div><div class="ttdeci">void Enter(const char *pszName, const char *pszFile, int nLine)</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00109">sync.h:109</a></div></div>
|
|
<div class="ttc" id="sync_8h_html_a8a4a73fdc781f3f58f9729fce8b7d13c"><div class="ttname"><a href="sync_8h.html#a8a4a73fdc781f3f58f9729fce8b7d13c">CCriticalBlock</a></div><div class="ttdeci">CMutexLock< CCriticalSection > CCriticalBlock</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00163">sync.h:163</a></div></div>
|
|
<div class="ttc" id="classAnnotatedMixin_html_acc2e3da37c2d9dd483b859572e32bc24"><div class="ttname"><a href="classAnnotatedMixin.html#acc2e3da37c2d9dd483b859572e32bc24">AnnotatedMixin::unlock</a></div><div class="ttdeci">void unlock() UNLOCK_FUNCTION()</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00063">sync.h:63</a></div></div>
|
|
<div class="ttc" id="classAnnotatedMixin_html_a9a33deab2da56790d8b5d30b1fd8350d"><div class="ttname"><a href="classAnnotatedMixin.html#a9a33deab2da56790d8b5d30b1fd8350d">AnnotatedMixin::try_lock</a></div><div class="ttdeci">bool try_lock() EXCLUSIVE_TRYLOCK_FUNCTION(true)</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00068">sync.h:68</a></div></div>
|
|
<div class="ttc" id="classAnnotatedMixin_html_ad1f35c6d1b8a8e980fff45e7e7cb46d3"><div class="ttname"><a href="classAnnotatedMixin.html#ad1f35c6d1b8a8e980fff45e7e7cb46d3">AnnotatedMixin::lock</a></div><div class="ttdeci">void lock() EXCLUSIVE_LOCK_FUNCTION()</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00058">sync.h:58</a></div></div>
|
|
<div class="ttc" id="classCSemaphoreGrant_html_afed7f1f7ac912c175dcd9c898fa4e2ed"><div class="ttname"><a href="classCSemaphoreGrant.html#afed7f1f7ac912c175dcd9c898fa4e2ed">CSemaphoreGrant::sem</a></div><div class="ttdeci">CSemaphore * sem</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00226">sync.h:226</a></div></div>
|
|
<div class="ttc" id="classAnnotatedMixin_html"><div class="ttname"><a href="classAnnotatedMixin.html">AnnotatedMixin</a></div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00055">sync.h:55</a></div></div>
|
|
<div class="ttc" id="classCSemaphore_html_abb8a07e6cac29dc72f044cd536a9f9e5"><div class="ttname"><a href="classCSemaphore.html#abb8a07e6cac29dc72f044cd536a9f9e5">CSemaphore::try_wait</a></div><div class="ttdeci">bool try_wait()</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00203">sync.h:203</a></div></div>
|
|
<div class="ttc" id="threadsafety_8h_html_abd56e19f9b4781b1a5212a46951cf5c3"><div class="ttname"><a href="threadsafety_8h.html#abd56e19f9b4781b1a5212a46951cf5c3">UNLOCK_FUNCTION</a></div><div class="ttdeci">#define UNLOCK_FUNCTION(...)</div><div class="ttdef"><b>Definition:</b> <a href="threadsafety_8h_source.html#l00047">threadsafety.h:47</a></div></div>
|
|
<div class="ttc" id="classCSemaphoreGrant_html_a9952d9ea087ced803c099f69992ebb1d"><div class="ttname"><a href="classCSemaphoreGrant.html#a9952d9ea087ced803c099f69992ebb1d">CSemaphoreGrant::TryAcquire</a></div><div class="ttdeci">bool TryAcquire()</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00246">sync.h:246</a></div></div>
|
|
<div class="ttc" id="classCMutexLock_html_af475e374b70ac03db516d00f65b723b7"><div class="ttname"><a href="classCMutexLock.html#af475e374b70ac03db516d00f65b723b7">CMutexLock::~CMutexLock</a></div><div class="ttdeci">~CMutexLock() UNLOCK_FUNCTION()</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00151">sync.h:151</a></div></div>
|
|
<div class="ttc" id="classCSemaphoreGrant_html_a5998c457c7c223a8257166161d12b355"><div class="ttname"><a href="classCSemaphoreGrant.html#a5998c457c7c223a8257166161d12b355">CSemaphoreGrant::CSemaphoreGrant</a></div><div class="ttdeci">CSemaphoreGrant(CSemaphore &sema, bool fTry=false)</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00264">sync.h:264</a></div></div>
|
|
<div class="ttc" id="sync_8h_html_a341e0aa38106c4dbcedbba878dceb1a5"><div class="ttname"><a href="sync_8h.html#a341e0aa38106c4dbcedbba878dceb1a5">CWaitableCriticalSection</a></div><div class="ttdeci">AnnotatedMixin< boost::mutex > CWaitableCriticalSection</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00081">sync.h:81</a></div></div>
|
|
<div class="ttc" id="sync_8h_html_a02dcb9057e60696179d85668ca6be50e"><div class="ttname"><a href="sync_8h.html#a02dcb9057e60696179d85668ca6be50e">AssertLockHeldInternal</a></div><div class="ttdeci">static void AssertLockHeldInternal(const char *pszName, const char *pszFile, int nLine, void *cs)</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00094">sync.h:94</a></div></div>
|
|
<div class="ttc" id="classCSemaphore_html_a1c108bd981fe68527ec8ef5e7b0d116c"><div class="ttname"><a href="classCSemaphore.html#a1c108bd981fe68527ec8ef5e7b0d116c">CSemaphore::wait</a></div><div class="ttdeci">void wait()</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00194">sync.h:194</a></div></div>
|
|
<div class="ttc" id="classCSemaphore_html"><div class="ttname"><a href="classCSemaphore.html">CSemaphore</a></div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00184">sync.h:184</a></div></div>
|
|
<div class="ttc" id="classCSemaphoreGrant_html"><div class="ttname"><a href="classCSemaphoreGrant.html">CSemaphoreGrant</a></div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00223">sync.h:223</a></div></div>
|
|
<div class="ttc" id="sync_8h_html_afc02589835b058cee9b180e89ee234c9"><div class="ttname"><a href="sync_8h.html#afc02589835b058cee9b180e89ee234c9">EnterCritical</a></div><div class="ttdeci">static void EnterCritical(const char *pszName, const char *pszFile, int nLine, void *cs, bool fTry=false)</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00092">sync.h:92</a></div></div>
|
|
<div class="ttc" id="sync_8h_html_a222f17e7a4e1fb9bb5a36fe9aca460b8"><div class="ttname"><a href="sync_8h.html#a222f17e7a4e1fb9bb5a36fe9aca460b8">LeaveCritical</a></div><div class="ttdeci">static void LeaveCritical()</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00093">sync.h:93</a></div></div>
|
|
<div class="ttc" id="classCSemaphore_html_afe13b8e59776248a0c49f9f2b31107fb"><div class="ttname"><a href="classCSemaphore.html#afe13b8e59776248a0c49f9f2b31107fb">CSemaphore::condition</a></div><div class="ttdeci">boost::condition_variable condition</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00187">sync.h:187</a></div></div>
|
|
<div class="ttc" id="classCSemaphore_html_ac9cc749c7424852d7fb4378811d0dae1"><div class="ttname"><a href="classCSemaphore.html#ac9cc749c7424852d7fb4378811d0dae1">CSemaphore::CSemaphore</a></div><div class="ttdeci">CSemaphore(int init)</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00192">sync.h:192</a></div></div>
|
|
<div class="ttc" id="threadsafety_8h_html_a9ce9440fc9b6862f43af10b70769f914"><div class="ttname"><a href="threadsafety_8h.html#a9ce9440fc9b6862f43af10b70769f914">LOCKABLE</a></div><div class="ttdeci">#define LOCKABLE</div><div class="ttdef"><b>Definition:</b> <a href="threadsafety_8h_source.html#l00035">threadsafety.h:35</a></div></div>
|
|
<div class="ttc" id="threadsafety_8h_html"><div class="ttname"><a href="threadsafety_8h.html">threadsafety.h</a></div></div>
|
|
<div class="ttc" id="classCSemaphoreGrant_html_a84ca79a4c8519f1a69697c060cabc51d"><div class="ttname"><a href="classCSemaphoreGrant.html#a84ca79a4c8519f1a69697c060cabc51d">CSemaphoreGrant::CSemaphoreGrant</a></div><div class="ttdeci">CSemaphoreGrant()</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00262">sync.h:262</a></div></div>
|
|
<div class="ttc" id="threadsafety_8h_html_a3c67d370ed1f55064d85e01076aad534"><div class="ttname"><a href="threadsafety_8h.html#a3c67d370ed1f55064d85e01076aad534">EXCLUSIVE_TRYLOCK_FUNCTION</a></div><div class="ttdeci">#define EXCLUSIVE_TRYLOCK_FUNCTION(...)</div><div class="ttdef"><b>Definition:</b> <a href="threadsafety_8h_source.html#l00045">threadsafety.h:45</a></div></div>
|
|
<div class="ttc" id="threadsafety_8h_html_a954d07e5a857905a2f333504beacef0d"><div class="ttname"><a href="threadsafety_8h.html#a954d07e5a857905a2f333504beacef0d">SCOPED_LOCKABLE</a></div><div class="ttdeci">#define SCOPED_LOCKABLE</div><div class="ttdef"><b>Definition:</b> <a href="threadsafety_8h_source.html#l00036">threadsafety.h:36</a></div></div>
|
|
<div class="ttc" id="classCSemaphore_html_a22a51512b911d93b37411cfffc764303"><div class="ttname"><a href="classCSemaphore.html#a22a51512b911d93b37411cfffc764303">CSemaphore::value</a></div><div class="ttdeci">int value</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00189">sync.h:189</a></div></div>
|
|
<div class="ttc" id="classCSemaphore_html_ac871c4228d6a9b7f67f340ba693a629d"><div class="ttname"><a href="classCSemaphore.html#ac871c4228d6a9b7f67f340ba693a629d">CSemaphore::mutex</a></div><div class="ttdeci">boost::mutex mutex</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00188">sync.h:188</a></div></div>
|
|
<div class="ttc" id="sync_8h_html_a37a4692b2d517f2843655ca11af7668a"><div class="ttname"><a href="sync_8h.html#a37a4692b2d517f2843655ca11af7668a">CCriticalSection</a></div><div class="ttdeci">AnnotatedMixin< boost::recursive_mutex > CCriticalSection</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00078">sync.h:78</a></div></div>
|
|
<div class="ttc" id="classCSemaphore_html_af6a956f6c191e824485fd3af6db39318"><div class="ttname"><a href="classCSemaphore.html#af6a956f6c191e824485fd3af6db39318">CSemaphore::post</a></div><div class="ttdeci">void post()</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00212">sync.h:212</a></div></div>
|
|
<div class="ttc" id="classCMutexLock_html_a5de553653dbbcc1432d07658fa9b0e8b"><div class="ttname"><a href="classCMutexLock.html#a5de553653dbbcc1432d07658fa9b0e8b">CMutexLock::CMutexLock</a></div><div class="ttdeci">CMutexLock(Mutex &mutexIn, const char *pszName, const char *pszFile, int nLine, bool fTry=false) EXCLUSIVE_LOCK_FUNCTION(mutexIn)</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00132">sync.h:132</a></div></div>
|
|
<div class="ttc" id="classCMutexLock_html_a9ba3770fa3e256a183b0ee52ebf048c4"><div class="ttname"><a href="classCMutexLock.html#a9ba3770fa3e256a183b0ee52ebf048c4">CMutexLock::TryEnter</a></div><div class="ttdeci">bool TryEnter(const char *pszName, const char *pszFile, int nLine)</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00122">sync.h:122</a></div></div>
|
|
<div class="ttc" id="classCMutexLock_html"><div class="ttname"><a href="classCMutexLock.html">CMutexLock</a></div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00104">sync.h:104</a></div></div>
|
|
<div class="ttc" id="classCMutexLock_html_a4725b7154d87d0e0eb47c62d299963be"><div class="ttname"><a href="classCMutexLock.html#a4725b7154d87d0e0eb47c62d299963be">CMutexLock::CMutexLock</a></div><div class="ttdeci">CMutexLock(Mutex *pmutexIn, const char *pszName, const char *pszFile, int nLine, bool fTry=false) EXCLUSIVE_LOCK_FUNCTION(pmutexIn)</div><div class="ttdef"><b>Definition:</b> <a href="sync_8h_source.html#l00140">sync.h:140</a></div></div>
|
|
</div><!-- fragment --></div><!-- contents -->
|
|
</div><!-- doc-content -->
|
|
<!-- start footer part -->
|
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
|
<ul>
|
|
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="sync_8h.html">sync.h</a></li>
|
|
<li class="footer">Generated on Thu Dec 14 2017 13:15:09 for Dash Core by
|
|
<a href="http://www.doxygen.org/index.html">
|
|
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.14 </li>
|
|
</ul>
|
|
</div>
|
|
</body>
|
|
</html>
|