1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 2<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> 3<title>oscl_mutex.h Source File</title> 4<link href="doxygen.css" rel="stylesheet" type="text/css"> 5</head><body> 6<!-- Generated by Doxygen 1.2.18 --> 7<center> 8<a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="modules.html">Modules</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="annotated.html">Data Structures</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Data Fields</a> <a class="qindex" href="globals.html">Globals</a> </center> 9<hr><h1>oscl_mutex.h</h1><a href="oscl__mutex_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 1000002 <span class="comment">// -*- c++ -*-</span> 1100003 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span> 1200004 1300005 <span class="comment">// O S C L _ M U T E X</span> 1400006 1500007 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span> 1600008 1700015 <span class="preprocessor">#ifndef OSCL_MUTEX_H_INCLUDED</span> 1800016 <span class="preprocessor"></span><span class="preprocessor">#define OSCL_MUTEX_H_INCLUDED</span> 1900017 <span class="preprocessor"></span> 2000018 <span class="preprocessor">#ifndef OSCLCONFIG_PROC_H_INCLUDED</span> 2100019 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="osclconfig__proc_8h.html">osclconfig_proc.h</a>"</span> 2200020 <span class="preprocessor">#endif</span> 2300021 <span class="preprocessor"></span><span class="preprocessor">#ifndef OSCL_TYPES_H_INCLUDED</span> 2400022 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__types_8h.html">oscl_types.h</a>"</span> 2500023 <span class="preprocessor">#endif</span> 2600024 <span class="preprocessor"></span><span class="preprocessor">#ifndef OSCL_BASE_H_INCLUDED</span> 2700025 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__base_8h.html">oscl_base.h</a>"</span> 2800026 <span class="preprocessor">#endif</span> 2900027 <span class="preprocessor"></span><span class="preprocessor">#ifndef OSCL_THREAD_H_INCLUDED</span> 3000028 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__thread_8h.html">oscl_thread.h</a>"</span> 3100029 <span class="preprocessor">#endif</span> 3200030 <span class="preprocessor"></span><span class="preprocessor">#ifndef OSCL_LOCK_BASE_H_INCLUDED</span> 3300031 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__lock__base_8h.html">oscl_lock_base.h</a>"</span> 3400032 <span class="preprocessor">#endif</span> 3500033 <span class="preprocessor"></span> 3600034 37<a name="l00038"></a><a class="code" href="classOsclMutex.html">00038</a> <span class="keyword">class </span><a class="code" href="classOsclMutex.html">OsclMutex</a> : <span class="keyword">public</span> <a class="code" href="classOsclLockBase.html">OsclLockBase</a> 3800039 { 3900040 <span class="keyword">public</span>: 4000041 4100045 OSCL_IMPORT_REF <a class="code" href="classOsclMutex.html#a0">OsclMutex</a>(); 4200046 4300050 OSCL_IMPORT_REF <span class="keyword">virtual</span> <a class="code" href="classOsclMutex.html#a1">~OsclMutex</a>(); 4400051 4500060 OSCL_IMPORT_REF <a class="code" href="classOsclProcStatus.html#s35">OsclProcStatus::eOsclProcError</a> <a class="code" href="classOsclMutex.html#a2">Create</a>(<span class="keywordtype">void</span>); 4600061 4700062 4800070 OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOsclMutex.html#a3">Lock</a>(); 4900071 5000083 OSCL_IMPORT_REF <a class="code" href="classOsclProcStatus.html#s35">OsclProcStatus::eOsclProcError</a> <a class="code" href="classOsclMutex.html#a4">TryLock</a>(); 5100084 5200085 5300093 OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOsclMutex.html#a5">Unlock</a>(); 5400094 5500095 5600104 OSCL_IMPORT_REF <a class="code" href="classOsclProcStatus.html#s35">OsclProcStatus::eOsclProcError</a> <a class="code" href="classOsclMutex.html#a6">Close</a>(<span class="keywordtype">void</span>); 5700105 5800106 <span class="keyword">private</span>: 5900107 6000115 <a class="code" href="classOsclProcStatus.html#s35">OsclProcStatus::eOsclProcError</a> ErrorMapping(int32 Error); 6100116 6200117 TOsclMutexObject ObjMutex; 6300118 <span class="keywordtype">bool</span> bCreated; 6400119 6500120 }; 6600121 6700136 <span class="preprocessor">#if !OSCL_HAS_NON_PREEMPTIVE_THREAD_SUPPORT</span> 6800137 <span class="preprocessor"></span><span class="comment">//In pre-emptive threading, OsclNoYieldMutex is identical to OsclMutex</span> 69<a name="l00138"></a><a class="code" href="oscl__mutex_8h.html#a0">00138</a> <span class="keyword">typedef</span> <a class="code" href="classOsclMutex.html">OsclMutex</a> <a class="code" href="classOsclMutex.html">OsclNoYieldMutex</a>; 7000139 <span class="preprocessor">#else</span> 7100140 <span class="preprocessor"></span><span class="comment">//In non-pre-emptive threading, OsclNoYieldMutex is a NO-OP.</span> 7200141 <span class="keyword">class </span>OsclNoYieldMutex : <span class="keyword">public</span> <a class="code" href="classOsclLockBase.html">OsclLockBase</a> 7300142 { 7400143 <span class="keyword">public</span>: 7500144 7600148 <a class="code" href="oscl__mutex_8h.html#a0">OsclNoYieldMutex</a>() 7700149 { 7800150 <span class="preprocessor">#ifndef NDEBUG</span> 7900151 <span class="preprocessor"></span> iNumLock = 0; 8000152 bCreated = <span class="keyword">false</span>; 8100153 <span class="preprocessor">#endif</span> 8200154 <span class="preprocessor"></span> } 8300155 8400159 <span class="keyword">virtual</span> ~OsclNoYieldMutex() 8500160 {} 8600161 8700170 <a class="code" href="classOsclProcStatus.html#s35">OsclProcStatus::eOsclProcError</a> <a class="code" href="classOsclMutex.html#a2">Create</a>(<span class="keywordtype">void</span>) 8800171 { 8900172 <span class="preprocessor">#ifndef NDEBUG</span> 9000173 <span class="preprocessor"></span> <span class="keywordflow">if</span> (bCreated) 9100174 <span class="keywordflow">return</span> <a class="code" href="classOsclProcStatus.html#s35s21">OsclProcStatus::INVALID_OPERATION_ERROR</a>; 9200175 bCreated = <span class="keyword">true</span>; 9300176 <span class="preprocessor">#endif</span> 9400177 <span class="preprocessor"></span> <span class="keywordflow">return</span> <a class="code" href="classOsclProcStatus.html#s35s0">OsclProcStatus::SUCCESS_ERROR</a>; 9500178 } 9600179 9700180 9800188 <span class="keywordtype">void</span> <a class="code" href="classOsclMutex.html#a3">Lock</a>() 9900189 { 10000190 <span class="preprocessor">#ifndef NDEBUG</span> 10100191 <span class="preprocessor"></span> <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(bCreated); 10200192 <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(iNumLock == 0);<span class="comment">//detect deadlock condition.</span> 10300193 iNumLock++; 10400194 <span class="preprocessor">#endif</span> 10500195 <span class="preprocessor"></span> } 10600196 10700208 <a class="code" href="classOsclProcStatus.html#s35">OsclProcStatus::eOsclProcError</a> <a class="code" href="classOsclMutex.html#a4">TryLock</a>() 10800209 { 10900210 <span class="preprocessor">#ifndef NDEBUG</span> 11000211 <span class="preprocessor"></span> <span class="keywordflow">if</span> (!bCreated) 11100212 <span class="keywordflow">return</span> <a class="code" href="classOsclProcStatus.html#s35s21">OsclProcStatus::INVALID_OPERATION_ERROR</a>; 11200213 <span class="keywordflow">if</span> (iNumLock) 11300214 <span class="keywordflow">return</span> <a class="code" href="classOsclProcStatus.html#s35s29">OsclProcStatus::MUTEX_LOCKED_ERROR</a>; 11400215 <span class="keywordflow">else</span> 11500216 <a class="code" href="classOsclMutex.html#a3">Lock</a>(); 11600217 <span class="keywordflow">return</span> <a class="code" href="classOsclProcStatus.html#s35s0">OsclProcStatus::SUCCESS_ERROR</a>; 11700218 <span class="preprocessor">#endif</span> 11800219 <span class="preprocessor"></span> } 11900220 12000221 12100229 <span class="keywordtype">void</span> <a class="code" href="classOsclMutex.html#a5">Unlock</a>() 12200230 { 12300231 <span class="preprocessor">#ifndef NDEBUG</span> 12400232 <span class="preprocessor"></span> <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(bCreated); 12500233 <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(iNumLock); 12600234 <span class="keywordflow">if</span> (iNumLock > 0) 12700235 iNumLock--; 12800236 <span class="preprocessor">#endif</span> 12900237 <span class="preprocessor"></span> } 13000238 13100239 13200248 <a class="code" href="classOsclProcStatus.html#s35">OsclProcStatus::eOsclProcError</a> <a class="code" href="classOsclMutex.html#a6">Close</a>(<span class="keywordtype">void</span>) 13300249 { 13400250 <span class="preprocessor">#ifndef NDEBUG</span> 13500251 <span class="preprocessor"></span> <span class="keywordflow">if</span> (!bCreated) 13600252 <span class="keywordflow">return</span> <a class="code" href="classOsclProcStatus.html#s35s21">OsclProcStatus::INVALID_OPERATION_ERROR</a>; 13700253 bCreated = <span class="keyword">false</span>; 13800254 <span class="preprocessor">#endif</span> 13900255 <span class="preprocessor"></span> <span class="keywordflow">return</span> <a class="code" href="classOsclProcStatus.html#s35s0">OsclProcStatus::SUCCESS_ERROR</a>; 14000256 } 14100257 14200258 <span class="keyword">private</span>: 14300259 14400260 <span class="preprocessor">#ifndef NDEBUG</span> 14500261 <span class="preprocessor"></span> uint32 iNumLock; 14600262 <span class="keywordtype">bool</span> bCreated; 14700263 <span class="preprocessor">#endif</span> 14800264 <span class="preprocessor"></span> 14900265 }; 15000266 <span class="preprocessor">#endif //OSCL_HAS_NON_PREEMPTIVE_THREAD_SUPPORT</span> 15100267 <span class="preprocessor"></span> 152<a name="l00271"></a><a class="code" href="classOsclThreadLock.html">00271</a> <span class="keyword">class </span><a class="code" href="classOsclThreadLock.html">OsclThreadLock</a>: <span class="keyword">public</span> <a class="code" href="classOsclLockBase.html">OsclLockBase</a> 15300272 { 15400273 <span class="keyword">public</span>: 15500274 OSCL_IMPORT_REF <a class="code" href="classOsclThreadLock.html#a0">OsclThreadLock</a>(); 15600275 OSCL_IMPORT_REF <span class="keyword">virtual</span> <a class="code" href="classOsclThreadLock.html#a1">~OsclThreadLock</a>(); 15700276 OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOsclThreadLock.html#a2">Lock</a>(); 15800277 OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOsclThreadLock.html#a3">Unlock</a>(); 15900278 <span class="keyword">private</span>: 16000279 <a class="code" href="classOsclMutex.html">OsclMutex</a> iMutex; 16100280 }; 16200281 16300282 <span class="preprocessor">#endif</span> 16400283 <span class="preprocessor"></span> 16500284 16600285 167</pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small> 168<address style="align: left;"><small>Posting Version: OPENCORE_20090310 </small> 169</small></address> 170</body> 171</html> 172