• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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> &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>
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 &gt; 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