1 | /*****************************************************************************/ |
2 | // Copyright 2006-2008 Adobe Systems Incorporated |
3 | // All Rights Reserved. |
4 | // |
5 | // NOTICE: Adobe permits you to use, modify, and distribute this file in |
6 | // accordance with the terms of the Adobe license agreement accompanying it. |
7 | /*****************************************************************************/ |
8 | |
9 | /* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_mutex.h#2 $ */ |
10 | /* $DateTime: 2012/09/05 12:31:51 $ */ |
11 | /* $Change: 847652 $ */ |
12 | /* $Author: tknoll $ */ |
13 | |
14 | /******************************************************************************/ |
15 | |
16 | #ifndef __dng_mutex__ |
17 | #define __dng_mutex__ |
18 | |
19 | /******************************************************************************/ |
20 | |
21 | #include "dng_flags.h" |
22 | |
23 | /******************************************************************************/ |
24 | |
25 | #include "dng_types.h" |
26 | |
27 | #if qDNGThreadSafe |
28 | |
29 | #include "dng_pthread.h" |
30 | |
31 | #endif |
32 | |
33 | /******************************************************************************/ |
34 | |
35 | class dng_mutex |
36 | { |
37 | |
38 | public: |
39 | |
40 | enum |
41 | { |
42 | kDNGMutexLevelLeaf = 0x70000000u |
43 | }; |
44 | |
45 | dng_mutex (const char *mutexName, |
46 | uint32 mutexLevel = kDNGMutexLevelLeaf); |
47 | |
48 | virtual ~dng_mutex (); |
49 | |
50 | void Lock (); |
51 | |
52 | void Unlock (); |
53 | |
54 | const char *MutexName () const; |
55 | |
56 | protected: |
57 | |
58 | #if qDNGThreadSafe |
59 | |
60 | pthread_mutex_t fPthreadMutex; |
61 | |
62 | const uint32 fMutexLevel; |
63 | |
64 | uint32 fRecursiveLockCount; |
65 | |
66 | dng_mutex *fPrevHeldMutex; |
67 | |
68 | const char * const fMutexName; |
69 | |
70 | friend class dng_condition; |
71 | |
72 | #endif |
73 | |
74 | private: |
75 | |
76 | // Hidden copy constructor and assignment operator. |
77 | |
78 | dng_mutex (const dng_mutex &mutex); |
79 | |
80 | dng_mutex & operator= (const dng_mutex &mutex); |
81 | |
82 | }; |
83 | |
84 | /*****************************************************************************/ |
85 | |
86 | class dng_lock_mutex |
87 | { |
88 | |
89 | private: |
90 | |
91 | dng_mutex *fMutex; |
92 | |
93 | public: |
94 | |
95 | dng_lock_mutex (dng_mutex *mutex); |
96 | |
97 | ~dng_lock_mutex (); |
98 | |
99 | private: |
100 | |
101 | // Hidden copy constructor and assignment operator. |
102 | |
103 | dng_lock_mutex (const dng_lock_mutex &lock); |
104 | |
105 | dng_lock_mutex & operator= (const dng_lock_mutex &lock); |
106 | |
107 | }; |
108 | |
109 | /*****************************************************************************/ |
110 | |
111 | class dng_unlock_mutex |
112 | { |
113 | |
114 | private: |
115 | |
116 | dng_mutex *fMutex; |
117 | |
118 | public: |
119 | |
120 | dng_unlock_mutex (dng_mutex *mutex); |
121 | |
122 | ~dng_unlock_mutex (); |
123 | |
124 | private: |
125 | |
126 | // Hidden copy constructor and assignment operator. |
127 | |
128 | dng_unlock_mutex (const dng_unlock_mutex &unlock); |
129 | |
130 | dng_unlock_mutex & operator= (const dng_unlock_mutex &unlock); |
131 | |
132 | }; |
133 | |
134 | /*****************************************************************************/ |
135 | |
136 | #if qDNGThreadSafe |
137 | |
138 | /*****************************************************************************/ |
139 | |
140 | class dng_condition |
141 | { |
142 | |
143 | public: |
144 | |
145 | dng_condition (); |
146 | |
147 | ~dng_condition (); |
148 | |
149 | bool Wait (dng_mutex &mutex, double timeoutSecs = -1.0); |
150 | |
151 | void Signal (); |
152 | |
153 | void Broadcast (); |
154 | |
155 | protected: |
156 | |
157 | pthread_cond_t fPthreadCondition; |
158 | |
159 | private: |
160 | |
161 | // Hidden copy constructor and assignment operator. |
162 | |
163 | dng_condition (const dng_condition &condition); |
164 | |
165 | dng_condition & operator= (const dng_condition &condition); |
166 | |
167 | }; |
168 | |
169 | /*****************************************************************************/ |
170 | |
171 | #endif // qDNGThreadSafe |
172 | |
173 | /*****************************************************************************/ |
174 | |
175 | #endif |
176 | |
177 | /*****************************************************************************/ |
178 | |