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 ("H") attempts to get a lock on a mutex that is already locked by a low-priority thread ("L"), 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> 73 </table> 74 </div> 75 </a> <a name="function" id="function"> 76<h2>Member Functions</h2> 77 <div class="section"> 78 <table class="members"> 79 <tr> 80 <td width="100"> </td> 81 <th> 82<a href="../../../nn/os/Mutex/Mutex.html"><CODE>Mutex</CODE></a> 83 </th> 84<td>Constructs and initializes a mutex.</td> 85 </tr> 86 <tr> 87 <td width="100"> </td> 88 <th> 89<a href="../../../nn/os/Mutex/Initialize.html"><CODE>Initialize</CODE></a> 90 </th> 91<td>Initializes a mutex.</td> 92 </tr> 93 <tr> 94 <td width="100"> </td> 95 <th> 96<a href="../../../nn/os/Mutex/TryInitialize.html"><CODE>TryInitialize</CODE></a> 97 </th> 98<td>Tries to initialize a mutex.</td> 99 </tr> 100 <tr> 101 <td width="100"> </td> 102 <th> 103<a href="../../../nn/os/Mutex/Finalize.html"><CODE>Finalize</CODE></a> 104 </th> 105<td>Destroys a mutex.</td> 106 </tr> 107 <tr> 108 <td width="100"> </td> 109 <th> 110<a href="../../../nn/os/Mutex/~Mutex.html"><CODE>~Mutex</CODE></a> 111 </th> 112<td>Destructor.</td> 113 </tr> 114 <tr> 115 <td width="100"> </td> 116 <th> 117<a href="../../../nn/os/Mutex/Lock.html"><CODE>Lock</CODE></a> 118 </th> 119<td>Locks a mutex.</td> 120 </tr> 121 <tr> 122 <td width="100"> </td> 123 <th> 124<a href="../../../nn/os/Mutex/TryLock.html"><CODE>TryLock</CODE></a> 125 </th> 126<td>Tries to lock a mutex.</td> 127 </tr> 128 <tr> 129 <td width="100"> </td> 130 <th> 131<a href="../../../nn/os/Mutex/Unlock.html"><CODE>Unlock</CODE></a> 132 </th> 133<td>Unlocks a mutex.</td> 134 </tr> </table> 135 </div> 136 </a> 137<h2>Class Hierarchy</h2> 138 <div class="section"> 139<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> 140 </p> 141 </div> 142<h2>Revision History</h2> 143 <div class="section"> 144 <dl class="history"> 145 <dt>2010/01/07</dt> 146<dd>Initial version.<br /> 147 </dd> 148 </dl> 149 </div> 150 <hr><p>CONFIDENTIAL</p></body> 151</html>