1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2<html xml:lang="en-US" lang="en-US" xmlns="http://www.w3.org/1999/xhtml">
3  <head>
4    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5    <meta http-equiv="Content-Style-Type" content="text/css" />
6    <link rel="stylesheet" href="../../../css/manpage.css" type="text/css" />
7    <style type="text/css"><!--
8      span.static_style
9      {
10        font-size			: 8pt;
11        color				: white;
12        font-weight			: bold;
13        background			: #44f;
14        border-left			: solid 1px #aaf;
15        border-top			: solid 1px #aaf;
16        border-right		: solid 1px #00c;
17        border-bottom		: solid 1px #00c;
18        padding-left		: 2px;
19        padding-right		: 2px;
20      }
21
22      span.virtual_style
23      {
24        font-size			 : 8pt;
25        color				 : white;
26        font-weight			: bold;
27        background			: #0a0;
28        border-left			: solid 1px #0f0;
29        border-top			: solid 1px #0f0;
30        border-right		: solid 1px #060;
31        border-bottom		: solid 1px #060;
32        padding-left		: 2px;
33        padding-right		: 2px;
34      }
35
36      span.protected_style
37      {
38        font-size			 : 8pt;
39        color				 : white;
40        font-weight			: bold;
41        background			: #444;
42        border-left			: solid 1px #ccc;
43        border-top			: solid 1px #ccc;
44        border-right		: solid 1px #222;
45        border-bottom		: solid 1px #222;
46        padding-left		: 2px;
47        padding-right		: 2px;
48      }
49        --></style>
50<title>nn::os::Mutex</title>
51  </head>
52  <body>
53<h1><CODE>nn::os::Mutex</CODE> Class</h1>
54    <div class="section">
55<b>Header file: </b>nn/os.h</div>
56<h2>Syntax</h2>
57    <div class="section">
58      <pre class="definition">class Mutex : public <a href="../../../nn/os/WaitObject/Overview.html">nn::os::WaitObject</a></pre>
59    </div>
60<h2>Description</h2>
61    <div class="section">
62<p>Class for handling mutexes. Mutexes are synchronization objects used for providing mutual exclusion.</p><p>Generally, use the <a href="../../../nn/os/Mutex/Overview.html"><CODE>nn::os::Mutex</CODE></a> class instead of <a href="../../../nn/os/CriticalSection/Overview.html"><CODE>nn::os::CriticalSection</CODE></a>. The <a href="../../../nn/os/CriticalSection/Overview.html"><CODE>nn::os::CriticalSection</CODE></a> class performs considerably faster than <a href="../../../nn/os/Mutex/Overview.html"><CODE>nn::os::Mutex</CODE></a> when there are no lock collisions between threads.</p><p>This mechanism prevents certain areas within programs from being run simultaneously within multiple threads. It also prevents data, registers, and other resources from being accessed by multiple threads simultaneously.</p><p>Mutexes can be locked using <a href="../../../nn/os/Mutex/Lock.html"><CODE>Lock</CODE></a>. A mutex that is locked by a certain thread cannot be locked by other threads. If another thread attempts to lock it, that thread will block until the mutex is unlocked.</p><p>The <CODE><a href="../../../nn/os/Mutex/Unlock.html">Unlock</a></CODE> method unlocks mutexes, but it can only be called from the locking thread because mutex locks are associated with their threads.</p><p>The <CODE><a href="../../../nn/os/Mutex/Overview.html">Mutex</a></CODE> class implements recursively locking mutexes. (In other words, <CODE><a href="../../../nn/os/Mutex/Lock.html">Lock</a></CODE> can be called from a locked thread.) In this case, the mutex will not be unlocked until <CODE><a href="../../../nn/os/Mutex/Unlock.html">Unlock</a></CODE> is called the same number of times that <CODE><a href="../../../nn/os/Mutex/Lock.html">Lock</a></CODE> was called.</p><p>The <CODE><a href="../../../nn/os/Mutex/Overview.html">Mutex</a></CODE> class implements priority inheritance. If a high-priority thread (&quot;H&quot;) attempts to get a lock on a mutex that is already locked by a low-priority thread (&quot;L&quot;), the priority of thread L will temporarily be raised to the same priority as thread H.</p><p>The <CODE>Wait</CODE> operation of a <CODE><a href="../../../nn/os/Mutex/Overview.html">Mutex</a></CODE> object gets a lock. Once the lock can be obtained, the <CODE>Wait</CODE> operation is released.</p><p>The use of <CODE><a href="../../../nn/os/Mutex/ScopedLock/Overview.html">nn::os::Mutex::ScopedLock</a></CODE> makes it possible to lock a mutex starting when an object is created, and continuing until it goes out of scope.</p><!-- write here --></div>
63    <a name="class" id="class">
64<h2>Classes</h2>
65      <div class="section">
66        <table class="members">
67          <tr>
68            <th>
69<a href="../../../nn/os/Mutex/ScopedLock/Overview.html"><CODE>nn::os::Mutex::ScopedLock</CODE></a>
70            </th>
71<td>Locks a mutex starting when an object is created, and continues locking it until the the object goes out of scope.</td>
72          </tr> </table>
73      </div>
74    </a> <a name="function" id="function">
75<h2>Member Functions</h2>
76      <div class="section">
77        <table class="members">
78          <tr>
79            <td width="100">  </td>
80            <th>
81<a href="../../../nn/os/Mutex/Mutex.html"><CODE>Mutex</CODE></a>
82            </th>
83<td>Constructs and initializes a mutex.</td>
84          </tr>
85          <tr>
86            <td width="100">  </td>
87            <th>
88<a href="../../../nn/os/Mutex/Initialize.html"><CODE>Initialize</CODE></a>
89            </th>
90<td>Initializes a mutex.</td>
91          </tr>
92          <tr>
93            <td width="100">  </td>
94            <th>
95<a href="../../../nn/os/Mutex/TryInitialize.html"><CODE>TryInitialize</CODE></a>
96            </th>
97<td>Tries to initialize a mutex.</td>
98          </tr>
99          <tr>
100            <td width="100">  </td>
101            <th>
102<a href="../../../nn/os/Mutex/Finalize.html"><CODE>Finalize</CODE></a>
103            </th>
104<td>Destroys a mutex.</td>
105          </tr>
106          <tr>
107            <td width="100">  </td>
108            <th>
109<a href="../../../nn/os/Mutex/~Mutex.html"><CODE>~Mutex</CODE></a>
110            </th>
111<td>Destructor.</td>
112          </tr>
113          <tr>
114            <td width="100">  </td>
115            <th>
116<a href="../../../nn/os/Mutex/Lock.html"><CODE>Lock</CODE></a>
117            </th>
118<td>Locks a mutex.</td>
119          </tr>
120          <tr>
121            <td width="100">  </td>
122            <th>
123<a href="../../../nn/os/Mutex/TryLock.html"><CODE>TryLock</CODE></a>
124            </th>
125<td>Tries to lock a mutex.</td>
126          </tr>
127          <tr>
128            <td width="100">  </td>
129            <th>
130<a href="../../../nn/os/Mutex/Unlock.html"><CODE>Unlock</CODE></a>
131            </th>
132<td>Unlocks a mutex.</td>
133          </tr> </table>
134      </div>
135    </a>
136<h2>Class Hierarchy</h2>
137    <div class="section">
138<p class="hierarchy"><span>ADLFireWall::NonCopyable</span><br />  <a href="../../../nn/os/HandleObject/Overview.html">nn::os::HandleObject</a><br />    <a href="../../../nn/os/WaitObject/Overview.html">nn::os::WaitObject</a><br />      <b>nn::os::Mutex</b>
139      </p>
140    </div>
141<h2>Revision History</h2>
142    <div class="section">
143      <dl class="history">
144        <dt>2010/01/07</dt>
145<dd>Initial version.<br />
146        </dd>
147      </dl>
148    </div>
149  <hr><p>CONFIDENTIAL</p></body>
150</html>