blob: 6e288107a06539836bf88fd4c255a1d2d8f31187 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>oscl_mutex.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.2.18 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Data Structures</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Data Fields</a> &nbsp; <a class="qindex" href="globals.html">Globals</a> &nbsp; </center>
<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
00002 <span class="comment">// -*- c++ -*-</span>
00003 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span>
00004
00005 <span class="comment">// O S C L _ M U T E X</span>
00006
00007 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span>
00008
00015 <span class="preprocessor">#ifndef OSCL_MUTEX_H_INCLUDED</span>
00016 <span class="preprocessor"></span><span class="preprocessor">#define OSCL_MUTEX_H_INCLUDED</span>
00017 <span class="preprocessor"></span>
00018 <span class="preprocessor">#ifndef OSCLCONFIG_PROC_H_INCLUDED</span>
00019 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="osclconfig__proc_8h.html">osclconfig_proc.h</a>"</span>
00020 <span class="preprocessor">#endif</span>
00021 <span class="preprocessor"></span><span class="preprocessor">#ifndef OSCL_TYPES_H_INCLUDED</span>
00022 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__types_8h.html">oscl_types.h</a>"</span>
00023 <span class="preprocessor">#endif</span>
00024 <span class="preprocessor"></span><span class="preprocessor">#ifndef OSCL_BASE_H_INCLUDED</span>
00025 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__base_8h.html">oscl_base.h</a>"</span>
00026 <span class="preprocessor">#endif</span>
00027 <span class="preprocessor"></span><span class="preprocessor">#ifndef OSCL_THREAD_H_INCLUDED</span>
00028 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__thread_8h.html">oscl_thread.h</a>"</span>
00029 <span class="preprocessor">#endif</span>
00030 <span class="preprocessor"></span><span class="preprocessor">#ifndef OSCL_LOCK_BASE_H_INCLUDED</span>
00031 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__lock__base_8h.html">oscl_lock_base.h</a>"</span>
00032 <span class="preprocessor">#endif</span>
00033 <span class="preprocessor"></span>
00034
<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>
00039 {
00040 <span class="keyword">public</span>:
00041
00045 OSCL_IMPORT_REF <a class="code" href="classOsclMutex.html#a0">OsclMutex</a>();
00046
00050 OSCL_IMPORT_REF <span class="keyword">virtual</span> <a class="code" href="classOsclMutex.html#a1">~OsclMutex</a>();
00051
00060 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>);
00061
00062
00070 OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOsclMutex.html#a3">Lock</a>();
00071
00083 OSCL_IMPORT_REF <a class="code" href="classOsclProcStatus.html#s35">OsclProcStatus::eOsclProcError</a> <a class="code" href="classOsclMutex.html#a4">TryLock</a>();
00084
00085
00093 OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOsclMutex.html#a5">Unlock</a>();
00094
00095
00104 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>);
00105
00106 <span class="keyword">private</span>:
00107
00115 <a class="code" href="classOsclProcStatus.html#s35">OsclProcStatus::eOsclProcError</a> ErrorMapping(int32 Error);
00116
00117 TOsclMutexObject ObjMutex;
00118 <span class="keywordtype">bool</span> bCreated;
00119
00120 };
00121
00136 <span class="preprocessor">#if !OSCL_HAS_NON_PREEMPTIVE_THREAD_SUPPORT</span>
00137 <span class="preprocessor"></span><span class="comment">//In pre-emptive threading, OsclNoYieldMutex is identical to OsclMutex</span>
<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>;
00139 <span class="preprocessor">#else</span>
00140 <span class="preprocessor"></span><span class="comment">//In non-pre-emptive threading, OsclNoYieldMutex is a NO-OP.</span>
00141 <span class="keyword">class </span>OsclNoYieldMutex : <span class="keyword">public</span> <a class="code" href="classOsclLockBase.html">OsclLockBase</a>
00142 {
00143 <span class="keyword">public</span>:
00144
00148 <a class="code" href="oscl__mutex_8h.html#a0">OsclNoYieldMutex</a>()
00149 {
00150 <span class="preprocessor">#ifndef NDEBUG</span>
00151 <span class="preprocessor"></span> iNumLock = 0;
00152 bCreated = <span class="keyword">false</span>;
00153 <span class="preprocessor">#endif</span>
00154 <span class="preprocessor"></span> }
00155
00159 <span class="keyword">virtual</span> ~OsclNoYieldMutex()
00160 {}
00161
00170 <a class="code" href="classOsclProcStatus.html#s35">OsclProcStatus::eOsclProcError</a> <a class="code" href="classOsclMutex.html#a2">Create</a>(<span class="keywordtype">void</span>)
00171 {
00172 <span class="preprocessor">#ifndef NDEBUG</span>
00173 <span class="preprocessor"></span> <span class="keywordflow">if</span> (bCreated)
00174 <span class="keywordflow">return</span> <a class="code" href="classOsclProcStatus.html#s35s21">OsclProcStatus::INVALID_OPERATION_ERROR</a>;
00175 bCreated = <span class="keyword">true</span>;
00176 <span class="preprocessor">#endif</span>
00177 <span class="preprocessor"></span> <span class="keywordflow">return</span> <a class="code" href="classOsclProcStatus.html#s35s0">OsclProcStatus::SUCCESS_ERROR</a>;
00178 }
00179
00180
00188 <span class="keywordtype">void</span> <a class="code" href="classOsclMutex.html#a3">Lock</a>()
00189 {
00190 <span class="preprocessor">#ifndef NDEBUG</span>
00191 <span class="preprocessor"></span> <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(bCreated);
00192 <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(iNumLock == 0);<span class="comment">//detect deadlock condition.</span>
00193 iNumLock++;
00194 <span class="preprocessor">#endif</span>
00195 <span class="preprocessor"></span> }
00196
00208 <a class="code" href="classOsclProcStatus.html#s35">OsclProcStatus::eOsclProcError</a> <a class="code" href="classOsclMutex.html#a4">TryLock</a>()
00209 {
00210 <span class="preprocessor">#ifndef NDEBUG</span>
00211 <span class="preprocessor"></span> <span class="keywordflow">if</span> (!bCreated)
00212 <span class="keywordflow">return</span> <a class="code" href="classOsclProcStatus.html#s35s21">OsclProcStatus::INVALID_OPERATION_ERROR</a>;
00213 <span class="keywordflow">if</span> (iNumLock)
00214 <span class="keywordflow">return</span> <a class="code" href="classOsclProcStatus.html#s35s29">OsclProcStatus::MUTEX_LOCKED_ERROR</a>;
00215 <span class="keywordflow">else</span>
00216 <a class="code" href="classOsclMutex.html#a3">Lock</a>();
00217 <span class="keywordflow">return</span> <a class="code" href="classOsclProcStatus.html#s35s0">OsclProcStatus::SUCCESS_ERROR</a>;
00218 <span class="preprocessor">#endif</span>
00219 <span class="preprocessor"></span> }
00220
00221
00229 <span class="keywordtype">void</span> <a class="code" href="classOsclMutex.html#a5">Unlock</a>()
00230 {
00231 <span class="preprocessor">#ifndef NDEBUG</span>
00232 <span class="preprocessor"></span> <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(bCreated);
00233 <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(iNumLock);
00234 <span class="keywordflow">if</span> (iNumLock &gt; 0)
00235 iNumLock--;
00236 <span class="preprocessor">#endif</span>
00237 <span class="preprocessor"></span> }
00238
00239
00248 <a class="code" href="classOsclProcStatus.html#s35">OsclProcStatus::eOsclProcError</a> <a class="code" href="classOsclMutex.html#a6">Close</a>(<span class="keywordtype">void</span>)
00249 {
00250 <span class="preprocessor">#ifndef NDEBUG</span>
00251 <span class="preprocessor"></span> <span class="keywordflow">if</span> (!bCreated)
00252 <span class="keywordflow">return</span> <a class="code" href="classOsclProcStatus.html#s35s21">OsclProcStatus::INVALID_OPERATION_ERROR</a>;
00253 bCreated = <span class="keyword">false</span>;
00254 <span class="preprocessor">#endif</span>
00255 <span class="preprocessor"></span> <span class="keywordflow">return</span> <a class="code" href="classOsclProcStatus.html#s35s0">OsclProcStatus::SUCCESS_ERROR</a>;
00256 }
00257
00258 <span class="keyword">private</span>:
00259
00260 <span class="preprocessor">#ifndef NDEBUG</span>
00261 <span class="preprocessor"></span> uint32 iNumLock;
00262 <span class="keywordtype">bool</span> bCreated;
00263 <span class="preprocessor">#endif</span>
00264 <span class="preprocessor"></span>
00265 };
00266 <span class="preprocessor">#endif //OSCL_HAS_NON_PREEMPTIVE_THREAD_SUPPORT</span>
00267 <span class="preprocessor"></span>
<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>
00272 {
00273 <span class="keyword">public</span>:
00274 OSCL_IMPORT_REF <a class="code" href="classOsclThreadLock.html#a0">OsclThreadLock</a>();
00275 OSCL_IMPORT_REF <span class="keyword">virtual</span> <a class="code" href="classOsclThreadLock.html#a1">~OsclThreadLock</a>();
00276 OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOsclThreadLock.html#a2">Lock</a>();
00277 OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOsclThreadLock.html#a3">Unlock</a>();
00278 <span class="keyword">private</span>:
00279 <a class="code" href="classOsclMutex.html">OsclMutex</a> iMutex;
00280 };
00281
00282 <span class="preprocessor">#endif</span>
00283 <span class="preprocessor"></span>
00284
00285
</pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
<address style="align: left;"><small>Posting Version: OPENCORE_20090310 </small>
</small></address>
</body>
</html>