aboutsummaryrefslogtreecommitdiff
path: root/docs/doxygen/nel/a02517.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/doxygen/nel/a02517.html')
-rw-r--r--docs/doxygen/nel/a02517.html280
1 files changed, 280 insertions, 0 deletions
diff --git a/docs/doxygen/nel/a02517.html b/docs/doxygen/nel/a02517.html
new file mode 100644
index 00000000..c9a0848d
--- /dev/null
+++ b/docs/doxygen/nel/a02517.html
@@ -0,0 +1,280 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>NeL: NLMISC::CFastMutexMP class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.6 -->
+<div class="qindex"> <form class="search" action="search.php" method="get">
+<a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="namespacemembers.html">Namespace&nbsp;Members</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a> | <span class="search"><u>S</u>earch&nbsp;for&nbsp;<input class="search" type="text" name="query" value="" size="20" accesskey="s"/></span></form></div>
+<h1>NLMISC::CFastMutexMP Class Reference</h1><code>#include &lt;<a class="el" href="a06088.html">mutex.h</a>&gt;</code>
+<p>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Fast mutex for multiprocessor implementation (not fairly). Used for multiprocessor critical section synchronisation. The mutex ARE NOT recursive (ie don't call <a class="el" href="a02517.html#NLMISC_1_1CFastMutexMPa1">enter()</a> several times on the same mutex from the same thread without having called <a class="el" href="a02517.html#NLMISC_1_1CFastMutexMPa3">leave()</a>) ; The threads use a spin system to wait a little time before be put to sleep. It waits using CPU time.<p>
+Implementation notes:<ul>
+<li>Implementated under WIN32</li><li>Other OS use CMutex</li></ul>
+<p>
+<pre class="fragment"><div> <a class="code" href="a02517.html#NLMISC_1_1CFastMutexMPa0">CFastMutexMP</a> m;
+ m.enter ();
+ <span class="comment">// do critical stuffs</span>
+ m.leave ();
+ *
+</div></pre><dl compact><dt><b>Author:</b></dt><dd>Cyril 'Hulud' Corvazier <p>
+Olivier Cado <p>
+Nevrax France </dd></dl>
+<dl compact><dt><b>Date:</b></dt><dd>2002, 2003 </dd></dl>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06088.html#l00309">309</a> of file <a class="el" href="a06088.html">mutex.h</a>.<table border=0 cellpadding=0 cellspacing=0>
+<tr><td></td></tr>
+<tr><td colspan=2><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02517.html#NLMISC_1_1CFastMutexMPa0">CFastMutexMP</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Constructor. <a href="#NLMISC_1_1CFastMutexMPa0"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>__forceinline void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02517.html#NLMISC_1_1CFastMutexMPa1">enter</a> () volatile</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02517.html#NLMISC_1_1CFastMutexMPa2">init</a> () volatile</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Same as constructor, useful for init in a shared memory block. <a href="#NLMISC_1_1CFastMutexMPa2"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>__forceinline void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02517.html#NLMISC_1_1CFastMutexMPa3">leave</a> () volatile</td></tr>
+
+<tr><td colspan=2><br><h2>Private Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>volatile <a class="el" href="a04558.html#a11">uint32</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02517.html#NLMISC_1_1CFastMutexMPr0">_Lock</a></td></tr>
+
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="NLMISC_1_1CFastMutexMPa0" doxytag="NLMISC::CFastMutexMP::CFastMutexMP" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> NLMISC::CFastMutexMP::CFastMutexMP </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Constructor.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06088.html#l00314">314</a> of file <a class="el" href="a06088.html">mutex.h</a>.
+<p>
+<div class="fragment"><pre>00314 : <a class="code" href="a02517.html#NLMISC_1_1CFastMutexMPr0">_Lock</a>(0) {}
+</pre></div> </td>
+ </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="NLMISC_1_1CFastMutexMPa1" doxytag="NLMISC::CFastMutexMP::enter" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> __forceinline void NLMISC::CFastMutexMP::enter </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> volatile<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06088.html#l00320">320</a> of file <a class="el" href="a06088.html">mutex.h</a>.
+<p>
+References <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>00321 {
+00322 <span class="comment">//std::cout &lt;&lt; "Entering, Lock=" &lt;&lt; _Lock &lt;&lt; std::endl; </span>
+00323 <span class="keywordflow">while</span> (CFastMutex::atomic_swap (&amp;_Lock))
+00324 {
+00325 <span class="keyword">static</span> <a class="code" href="a04558.html#a15">uint</a> last = 0;
+00326 <span class="keyword">static</span> <a class="code" href="a04558.html#a15">uint</a> _max = 30;
+00327 <a class="code" href="a04558.html#a15">uint</a> spinMax = _max;
+00328 <a class="code" href="a04558.html#a15">uint</a> lastSpins = last;
+00329 <span class="keyword">volatile</span> <a class="code" href="a04558.html#a15">uint</a> temp = 17;
+00330 <a class="code" href="a04558.html#a15">uint</a> i;
+00331 <span class="keywordflow">for</span> (i = 0; i &lt; spinMax; ++i)
+00332 {
+00333 <span class="keywordflow">if</span> (i &lt; lastSpins/2 || <a class="code" href="a02517.html#NLMISC_1_1CFastMutexMPr0">_Lock</a>)
+00334 {
+00335 temp *= temp;
+00336 temp *= temp;
+00337 temp *= temp;
+00338 temp *= temp;
+00339 }
+00340 <span class="keywordflow">else</span>
+00341 {
+00342 <span class="keywordflow">if</span> (!CFastMutex::atomic_swap(&amp;_Lock))
+00343 {
+00344 last = i;
+00345 _max = 1000;
+00346 <span class="keywordflow">return</span>;
+00347 }
+00348 }
+00349 }
+00350
+00351 _max = 30;
+00352
+00353 <span class="comment">// First test</span>
+00354 <span class="keywordflow">for</span> (i = 0 ;; ++i)
+00355 {
+00356 <a class="code" href="a04558.html#a15">uint</a> wait_time = i + 6;
+00357
+00358 <span class="comment">// Increment wait time with a log function</span>
+00359 <span class="keywordflow">if</span> (wait_time &gt; 27)
+00360 wait_time = 27;
+00361
+00362 <span class="comment">// Sleep</span>
+00363 <span class="keywordflow">if</span> (wait_time &lt;= 20)
+00364 wait_time = 0;
+00365 <span class="keywordflow">else</span>
+00366 wait_time = 1 &lt;&lt; (wait_time - 20);
+00367
+00368 <span class="keywordflow">if</span> (!CFastMutex::atomic_swap (&amp;_Lock))
+00369 <span class="keywordflow">break</span>;
+00370
+00371 <span class="preprocessor">#ifdef NL_OS_WINDOWS</span>
+00372 <span class="preprocessor"></span> Sleep (wait_time);
+00373 <span class="preprocessor">#else</span>
+00374 <span class="preprocessor"></span> <span class="comment">//std::cout &lt;&lt; "Sleeping i=" &lt;&lt; i &lt;&lt; std::endl;</span>
+00375 usleep( wait_time*1000 );
+00376 <span class="preprocessor">#endif </span>
+00377 <span class="preprocessor"></span> }
+00378 }
+00379 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CFastMutexMPa2" doxytag="NLMISC::CFastMutexMP::init" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLMISC::CFastMutexMP::init </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">void&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> volatile<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Same as constructor, useful for init in a shared memory block.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06088.html#l00317">317</a> of file <a class="el" href="a06088.html">mutex.h</a>.
+<p>
+<div class="fragment"><pre>00317 { <a class="code" href="a02517.html#NLMISC_1_1CFastMutexMPr0">_Lock</a> = 0; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CFastMutexMPa3" doxytag="NLMISC::CFastMutexMP::leave" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> __forceinline void NLMISC::CFastMutexMP::leave </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> volatile<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06088.html#l00382">382</a> of file <a class="el" href="a06088.html">mutex.h</a>.
+<p>
+<div class="fragment"><pre>00383 {
+00384 <a class="code" href="a02517.html#NLMISC_1_1CFastMutexMPr0">_Lock</a> = 0;
+00385 <span class="comment">//std::cout &lt;&lt; "Leave" &lt;&lt; std::endl;</span>
+00386 }
+</pre></div> </td>
+ </tr>
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="NLMISC_1_1CFastMutexMPr0" doxytag="NLMISC::CFastMutexMP::_Lock" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> volatile <a class="el" href="a04558.html#a11">uint32</a> <a class="el" href="a02517.html#NLMISC_1_1CFastMutexMPr0">NLMISC::CFastMutexMP::_Lock</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06088.html#l00389">389</a> of file <a class="el" href="a06088.html">mutex.h</a>. </td>
+ </tr>
+</table>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="a06088.html">mutex.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Tue Mar 16 13:12:35 2004 for NeL by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border=0 >
+</a>1.3.6 </small></address>
+</body>
+</html>