Sophie

Sophie

distrib > Mandriva > 2010.2 > i586 > media > contrib-backports > by-pkgid > 4f5f2dc0f55b453456458df885792b0b > files > 414

ucommon-doc-5.0.4-1mdv2010.2.i586.rpm

<!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"/>
<title>ucommon: ucommon::ThreadLock Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.3 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
      <li><a href="examples.html"><span>Examples</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
      <li><a href="classes.html"><span>Data&nbsp;Structure&nbsp;Index</span></a></li>
      <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
      <li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
    </ul>
  </div>
  <div class="navpath"><a class="el" href="a00208.html">ucommon</a>::<a class="el" href="a00157.html">ThreadLock</a>
  </div>
</div>
<div class="contents">
<h1>ucommon::ThreadLock Class Reference</h1><!-- doxytag: class="ucommon::ThreadLock" --><!-- doxytag: inherits="ucommon::ConditionalAccess,ucommon::ExclusiveProtocol,ucommon::SharedProtocol" -->
<p>A generic and portable implimentation of Read/Write locking.  
<a href="#_details">More...</a></p>

<p><code>#include &lt;<a class="el" href="a00202_source.html">thread.h</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for ucommon::ThreadLock:</div>
<div class="dynsection">
<div class="center"><img src="a00552.png" border="0" usemap="#ucommon_1_1_thread_lock_inherit__map" alt="Inheritance graph"/></div>
<map name="ucommon_1_1_thread_lock_inherit__map" id="ucommon_1_1_thread_lock_inherit__map">
<area shape="rect" id="node2" href="a00037.html" title="The conditional rw seperates scheduling for optizming behavior or rw locks." alt="" coords="5,80,288,107"/><area shape="rect" id="node4" href="a00036.html" title="The conditional is a common base for other thread synchronizing classes." alt="" coords="36,5,257,32"/><area shape="rect" id="node6" href="a00049.html" title="An exclusive locking protocol interface base." alt="" coords="312,80,595,107"/><area shape="rect" id="node8" href="a00128.html" title="An exclusive locking protocol interface base." alt="" coords="619,80,869,107"/></map>
<center><span class="legend">[<a target="top" href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for ucommon::ThreadLock:</div>
<div class="dynsection">
<div class="center"><img src="a00553.png" border="0" usemap="#ucommon_1_1_thread_lock_coll__map" alt="Collaboration graph"/></div>
<map name="ucommon_1_1_thread_lock_coll__map" id="ucommon_1_1_thread_lock_coll__map">
<area shape="rect" id="node2" href="a00037.html" title="The conditional rw seperates scheduling for optizming behavior or rw locks." alt="" coords="5,80,288,107"/><area shape="rect" id="node4" href="a00036.html" title="The conditional is a common base for other thread synchronizing classes." alt="" coords="36,5,257,32"/><area shape="rect" id="node6" href="a00049.html" title="An exclusive locking protocol interface base." alt="" coords="312,80,595,107"/><area shape="rect" id="node8" href="a00128.html" title="An exclusive locking protocol interface base." alt="" coords="619,80,869,107"/></map>
<center><span class="legend">[<a target="top" href="graph_legend.html">legend</a>]</span></center></div>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Data Structures</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00158.html">gaurd_reader</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gaurd class to apply scope based access locking to objects.  <a href="a00158.html#_details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00159.html">gaurd_writer</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gaurd class to apply scope based exclusive locking to objects.  <a href="a00159.html#_details">More...</a><br/></td></tr>
<tr><td colspan="2"><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#a6809ba3a3e992cdd9f7688b4d9d52bb1">access</a> (<a class="el" href="a00194.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout=<a class="el" href="a00162.html#ad3d270c59686a8af48b731d389c65b1c">Timer::inf</a>)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Request shared (read) access through the lock.  <a href="#a6809ba3a3e992cdd9f7688b4d9d52bb1"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">unsigned&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#a9fb88c39e578343b3de8e295908072c9">getAccess</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the number of threads in shared access mode.  <a href="#a9fb88c39e578343b3de8e295908072c9"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">unsigned&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#a305e2b49cd90a6280fd24c2fdec4a5e3">getModify</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the number of threads waiting to modify the lock.  <a href="#a305e2b49cd90a6280fd24c2fdec4a5e3"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">unsigned&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#a8c775f8027406d914d2e121d65dac9d0">getWaiting</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the number of threads waiting to access after writer completes.  <a href="#a8c775f8027406d914d2e121d65dac9d0"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#a1bf92873e3b21e95702691d04a740bd2">modify</a> (<a class="el" href="a00194.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout=<a class="el" href="a00162.html#ad3d270c59686a8af48b731d389c65b1c">Timer::inf</a>)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Request modify (write) access through the lock.  <a href="#a1bf92873e3b21e95702691d04a740bd2"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aafc91c8db42cff397fe76e965e395f5e"></a><!-- doxytag: member="ucommon::ThreadLock::release" ref="aafc91c8db42cff397fe76e965e395f5e" args="(void)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#aafc91c8db42cff397fe76e965e395f5e">release</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Release the lock. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3a300cf68fc86b33cd8f8e4befa80237"></a><!-- doxytag: member="ucommon::ThreadLock::ThreadLock" ref="a3a300cf68fc86b33cd8f8e4befa80237" args="()" -->
&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#a3a300cf68fc86b33cd8f8e4befa80237">ThreadLock</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create an instance of a rwlock. <br/></td></tr>
<tr><td colspan="2"><h2>Static Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ab1be714922f7a5a95f456dc29ab4f8a7">access</a> (<a class="el" href="a00157.html">ThreadLock</a> &amp;lock, <a class="el" href="a00194.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout=<a class="el" href="a00162.html#ad3d270c59686a8af48b731d389c65b1c">Timer::inf</a>)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Convenience function to access (read lock) a rwlock.  <a href="#ab1be714922f7a5a95f456dc29ab4f8a7"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#a7389c5247e474a9423d1a2808d03bd3f">indexing</a> (unsigned size)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Specify hash table size for gaurd protection.  <a href="#a7389c5247e474a9423d1a2808d03bd3f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#abb5420f1d1b6b3fd410a7070914c5dc2">modify</a> (<a class="el" href="a00157.html">ThreadLock</a> &amp;lock, <a class="el" href="a00194.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout=<a class="el" href="a00162.html#ad3d270c59686a8af48b731d389c65b1c">Timer::inf</a>)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Convenience function to modify (write lock) a rwlock.  <a href="#abb5420f1d1b6b3fd410a7070914c5dc2"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#adfc12acd2e59774f1ac74b3da0c39497">reader</a> (void *object, <a class="el" href="a00194.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout=<a class="el" href="a00162.html#ad3d270c59686a8af48b731d389c65b1c">Timer::inf</a>)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Shared access to an arbitrary object.  <a href="#adfc12acd2e59774f1ac74b3da0c39497"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#a96a09e595c1c8d0e12efd42b1103a227">release</a> (<a class="el" href="a00157.html">ThreadLock</a> &amp;lock)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Convenience function to release a rwlock.  <a href="#a96a09e595c1c8d0e12efd42b1103a227"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#adc28816b8692681307f59e29686402ec">release</a> (void *object)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Release an arbitrary object that has been protected by a rwlock.  <a href="#adc28816b8692681307f59e29686402ec"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#af1b430a1ee895b32ccd820cd9ac637ef">writer</a> (void *object, <a class="el" href="a00194.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout=<a class="el" href="a00162.html#ad3d270c59686a8af48b731d389c65b1c">Timer::inf</a>)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Write protect access to an arbitrary object.  <a href="#af1b430a1ee895b32ccd820cd9ac637ef"></a><br/></td></tr>
<tr><td colspan="2"><h2>Protected Member Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1cf449fcd9fd169ec49adf9dc82a0bf1"></a><!-- doxytag: member="ucommon::ThreadLock::Exlock" ref="a1cf449fcd9fd169ec49adf9dc82a0bf1" args="(void)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#a1cf449fcd9fd169ec49adf9dc82a0bf1">Exlock</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Protocol interface to exclusive lock the object. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac21c8af69a6f5e1a211a404d9ce918da"></a><!-- doxytag: member="ucommon::ThreadLock::Shlock" ref="ac21c8af69a6f5e1a211a404d9ce918da" args="(void)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#ac21c8af69a6f5e1a211a404d9ce918da">Shlock</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Protocol interface to share lock the object. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2f5de96871ee9527f8984f01d4c1202c"></a><!-- doxytag: member="ucommon::ThreadLock::Unlock" ref="a2f5de96871ee9527f8984f01d4c1202c" args="(void)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00157.html#a2f5de96871ee9527f8984f01d4c1202c">Unlock</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Protocol interface to release a lock. <br/></td></tr>
<tr><td colspan="2"><h2>Protected Attributes</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a82c9f3e4ba7d442bd147e8d6f4eac24a"></a><!-- doxytag: member="ucommon::ThreadLock::writeid" ref="a82c9f3e4ba7d442bd147e8d6f4eac24a" args="" -->
pthread_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>writeid</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a532251f42f1516abd3ed0667110ef0bf"></a><!-- doxytag: member="ucommon::ThreadLock::writers" ref="a532251f42f1516abd3ed0667110ef0bf" args="" -->
unsigned&nbsp;</td><td class="memItemRight" valign="bottom"><b>writers</b></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>A generic and portable implimentation of Read/Write locking. </p>
<p>This class impliments classical read/write locking, including "timed" locks. Support for scheduling threads to avoid writer starvation is also provided for. By building read/write locks from a conditional, we make them available on pthread implimetations and other platforms which do not normally include optional pthread rwlock's. We also do not restrict the number of threads that may use the lock. Finally, both the exclusive and shared protocols are implimented to support <a class="el" href="a00048.html" title="A kind of smart pointer object to support exclusive locking protocol.">exclusive_lock</a> and <a class="el" href="a00123.html" title="A kind of smart pointer object to support shared locking protocol.">shared_lock</a> referencing. </p>
<dl class="author"><dt><b>Author:</b></dt><dd>David Sugar &lt;<a href="mailto:dyfet@gnutelephony.org">dyfet@gnutelephony.org</a>&gt; </dd></dl>

<p>Definition at line <a class="el" href="a00202_source.html#l00547">547</a> of file <a class="el" href="a00202_source.html">thread.h</a>.</p>
<hr/><h2>Member Function Documentation</h2>
<a class="anchor" id="ab1be714922f7a5a95f456dc29ab4f8a7"></a><!-- doxytag: member="ucommon::ThreadLock::access" ref="ab1be714922f7a5a95f456dc29ab4f8a7" args="(ThreadLock &amp;lock, timeout_t timeout=Timer::inf)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static bool ucommon::ThreadLock::access </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="a00157.html">ThreadLock</a> &amp;&nbsp;</td>
          <td class="paramname"> <em>lock</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="a00194.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a>&nbsp;</td>
          <td class="paramname"> <em>timeout</em> = <code><a class="el" href="a00162.html#ad3d270c59686a8af48b731d389c65b1c">Timer::inf</a></code></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Convenience function to access (read lock) a rwlock. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>lock</em>&nbsp;</td><td>to access. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timeout</em>&nbsp;</td><td>to wait for lock. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>true if successful, false if timeout. </dd></dl>

<p>Definition at line <a class="el" href="a00202_source.html#l00749">749</a> of file <a class="el" href="a00202_source.html">thread.h</a>.</p>

<p><div class="dynheader">
Here is the call graph for this function:</div>
<div class="dynsection">
<div class="center"><img src="a00157_ab1be714922f7a5a95f456dc29ab4f8a7_cgraph.png" border="0" usemap="#a00157_ab1be714922f7a5a95f456dc29ab4f8a7_cgraph_map" alt=""></div>
<map name="a00157_ab1be714922f7a5a95f456dc29ab4f8a7_cgraph_map" id="a00157_ab1be714922f7a5a95f456dc29ab4f8a7_cgraph">
<area shape="rect" id="node3" href="a00157.html#a6809ba3a3e992cdd9f7688b4d9d52bb1" title="Request shared (read) access through the lock." alt="" coords="348,5,639,32"/></map>
</div>
</p>

</div>
</div>
<a class="anchor" id="a6809ba3a3e992cdd9f7688b4d9d52bb1"></a><!-- doxytag: member="ucommon::ThreadLock::access" ref="a6809ba3a3e992cdd9f7688b4d9d52bb1" args="(timeout_t timeout=Timer::inf)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool ucommon::ThreadLock::access </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="a00194.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a>&nbsp;</td>
          <td class="paramname"> <em>timeout</em> = <code><a class="el" href="a00162.html#ad3d270c59686a8af48b731d389c65b1c">Timer::inf</a></code></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Request shared (read) access through the lock. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>timeout</em>&nbsp;</td><td>in milliseconds to wait for lock. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>true if locked, false if timeout. </dd></dl>

</div>
</div>
<a class="anchor" id="a9fb88c39e578343b3de8e295908072c9"></a><!-- doxytag: member="ucommon::ThreadLock::getAccess" ref="a9fb88c39e578343b3de8e295908072c9" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">unsigned ucommon::ThreadLock::getAccess </td>
          <td>(</td>
          <td class="paramtype">void&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Get the number of threads in shared access mode. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>number of accessing threads. </dd></dl>

</div>
</div>
<a class="anchor" id="a305e2b49cd90a6280fd24c2fdec4a5e3"></a><!-- doxytag: member="ucommon::ThreadLock::getModify" ref="a305e2b49cd90a6280fd24c2fdec4a5e3" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">unsigned ucommon::ThreadLock::getModify </td>
          <td>(</td>
          <td class="paramtype">void&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Get the number of threads waiting to modify the lock. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>number of pending write threads. </dd></dl>

</div>
</div>
<a class="anchor" id="a8c775f8027406d914d2e121d65dac9d0"></a><!-- doxytag: member="ucommon::ThreadLock::getWaiting" ref="a8c775f8027406d914d2e121d65dac9d0" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">unsigned ucommon::ThreadLock::getWaiting </td>
          <td>(</td>
          <td class="paramtype">void&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Get the number of threads waiting to access after writer completes. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>number of waiting access threads. </dd></dl>

</div>
</div>
<a class="anchor" id="a7389c5247e474a9423d1a2808d03bd3f"></a><!-- doxytag: member="ucommon::ThreadLock::indexing" ref="a7389c5247e474a9423d1a2808d03bd3f" args="(unsigned size)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void ucommon::ThreadLock::indexing </td>
          <td>(</td>
          <td class="paramtype">unsigned&nbsp;</td>
          <td class="paramname"> <em>size</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Specify hash table size for gaurd protection. </p>
<p>The default is 1. This should be called at initialization time from the main thread of the application before any other threads are created. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>of hash table used for gaurding. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="abb5420f1d1b6b3fd410a7070914c5dc2"></a><!-- doxytag: member="ucommon::ThreadLock::modify" ref="abb5420f1d1b6b3fd410a7070914c5dc2" args="(ThreadLock &amp;lock, timeout_t timeout=Timer::inf)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static bool ucommon::ThreadLock::modify </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="a00157.html">ThreadLock</a> &amp;&nbsp;</td>
          <td class="paramname"> <em>lock</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="a00194.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a>&nbsp;</td>
          <td class="paramname"> <em>timeout</em> = <code><a class="el" href="a00162.html#ad3d270c59686a8af48b731d389c65b1c">Timer::inf</a></code></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Convenience function to modify (write lock) a rwlock. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>lock</em>&nbsp;</td><td>to modify. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timeout</em>&nbsp;</td><td>to wait for lock. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>true if successful, false if timeout. </dd></dl>

<p>Definition at line <a class="el" href="a00202_source.html#l00740">740</a> of file <a class="el" href="a00202_source.html">thread.h</a>.</p>

<p><div class="dynheader">
Here is the call graph for this function:</div>
<div class="dynsection">
<div class="center"><img src="a00157_abb5420f1d1b6b3fd410a7070914c5dc2_cgraph.png" border="0" usemap="#a00157_abb5420f1d1b6b3fd410a7070914c5dc2_cgraph_map" alt=""></div>
<map name="a00157_abb5420f1d1b6b3fd410a7070914c5dc2_cgraph_map" id="a00157_abb5420f1d1b6b3fd410a7070914c5dc2_cgraph">
<area shape="rect" id="node3" href="a00157.html#a1bf92873e3b21e95702691d04a740bd2" title="Request modify (write) access through the lock." alt="" coords="348,5,639,32"/></map>
</div>
</p>

</div>
</div>
<a class="anchor" id="a1bf92873e3b21e95702691d04a740bd2"></a><!-- doxytag: member="ucommon::ThreadLock::modify" ref="a1bf92873e3b21e95702691d04a740bd2" args="(timeout_t timeout=Timer::inf)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool ucommon::ThreadLock::modify </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="a00194.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a>&nbsp;</td>
          <td class="paramname"> <em>timeout</em> = <code><a class="el" href="a00162.html#ad3d270c59686a8af48b731d389c65b1c">Timer::inf</a></code></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Request modify (write) access through the lock. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>timeout</em>&nbsp;</td><td>in milliseconds to wait for lock. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>true if locked, false if timeout. </dd></dl>

</div>
</div>
<a class="anchor" id="adfc12acd2e59774f1ac74b3da0c39497"></a><!-- doxytag: member="ucommon::ThreadLock::reader" ref="adfc12acd2e59774f1ac74b3da0c39497" args="(void *object, timeout_t timeout=Timer::inf)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static bool ucommon::ThreadLock::reader </td>
          <td>(</td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>object</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="a00194.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a>&nbsp;</td>
          <td class="paramname"> <em>timeout</em> = <code><a class="el" href="a00162.html#ad3d270c59686a8af48b731d389c65b1c">Timer::inf</a></code></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Shared access to an arbitrary object. </p>
<p>This is based on the protect function of mutex. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>object</em>&nbsp;</td><td>to share. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timeout</em>&nbsp;</td><td>in milliseconds to wait for lock. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>true if shared, false if timeout. </dd></dl>

</div>
</div>
<a class="anchor" id="a96a09e595c1c8d0e12efd42b1103a227"></a><!-- doxytag: member="ucommon::ThreadLock::release" ref="a96a09e595c1c8d0e12efd42b1103a227" args="(ThreadLock &amp;lock)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void ucommon::ThreadLock::release </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="a00157.html">ThreadLock</a> &amp;&nbsp;</td>
          <td class="paramname"> <em>lock</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Convenience function to release a rwlock. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>lock</em>&nbsp;</td><td>to release. </td></tr>
  </table>
  </dd>
</dl>

<p>Definition at line <a class="el" href="a00202_source.html#l00756">756</a> of file <a class="el" href="a00202_source.html">thread.h</a>.</p>

<p><div class="dynheader">
Here is the call graph for this function:</div>
<div class="dynsection">
<div class="center"><img src="a00157_a96a09e595c1c8d0e12efd42b1103a227_cgraph.png" border="0" usemap="#a00157_a96a09e595c1c8d0e12efd42b1103a227_cgraph_map" alt=""></div>
<map name="a00157_a96a09e595c1c8d0e12efd42b1103a227_cgraph_map" id="a00157_a96a09e595c1c8d0e12efd42b1103a227_cgraph">
<area shape="rect" id="node3" href="a00157.html#adc28816b8692681307f59e29686402ec" title="Release an arbitrary object that has been protected by a rwlock." alt="" coords="359,5,660,32"/></map>
</div>
</p>

</div>
</div>
<a class="anchor" id="adc28816b8692681307f59e29686402ec"></a><!-- doxytag: member="ucommon::ThreadLock::release" ref="adc28816b8692681307f59e29686402ec" args="(void *object)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static void ucommon::ThreadLock::release </td>
          <td>(</td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>object</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Release an arbitrary object that has been protected by a rwlock. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>object</em>&nbsp;</td><td>to release. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="af1b430a1ee895b32ccd820cd9ac637ef"></a><!-- doxytag: member="ucommon::ThreadLock::writer" ref="af1b430a1ee895b32ccd820cd9ac637ef" args="(void *object, timeout_t timeout=Timer::inf)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static bool ucommon::ThreadLock::writer </td>
          <td>(</td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>object</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="a00194.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a>&nbsp;</td>
          <td class="paramname"> <em>timeout</em> = <code><a class="el" href="a00162.html#ad3d270c59686a8af48b731d389c65b1c">Timer::inf</a></code></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Write protect access to an arbitrary object. </p>
<p>This is like the protect function of mutex. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>object</em>&nbsp;</td><td>to protect. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timeout</em>&nbsp;</td><td>in milliseconds to wait for lock. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>true if locked, false if timeout. </dd></dl>

</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>ucommon/<a class="el" href="a00202_source.html">thread.h</a></li>
</ul>
</div>
<hr class="footer"/><address style="text-align: right;"><small>Generated on Thu Jul 14 16:40:09 2011 for ucommon by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.3 </small></address>
</body>
</html>