UNIVERS  15.3
UNIVERS base processing software API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
mutex.h
1 /* mutex.h */
2 /* $Id: mutex.h,v 1.3 2008/11/05 16:19:35 ibadm Exp $ */
3 #ifndef __mutex_h
4 #define __mutex_h
5 
6 #ifndef NO_MUTEX
7 #include <pthread.h>
8 #endif /* NO_MUTEX */
9 #include <mix/Types.h>
10 #include <mix/ErrCodes.h>
11 
12 
27 #ifdef NO_MUTEX
28 typedef int MutexId;
29 
30 #define MTSafeBegin(pMId) {
31 #define MTSafeEnd(pMId) }
32 
33 /* Trace local storage definition for non-thread environments */
34 #define TLStorage
35 
36 #else /* NO_MUTEX */
37 
39 typedef pthread_mutex_t MutexId;
40 
41 #define MTSafeBegin(pMId) if(OK == MutexLock(pMId)) {
42 #define MTSafeEnd(pMId) MutexUnlock(pMId); }
43 
44 /* Trace local storage definition for thread-enabled environment */
45 #ifdef WIN32
46 #define TLStorage __declspec(thread)
47 #else /* on Linux, AIX, SOLARIS etc */
48 #define TLStorage __thread
49 #endif /* WIN32 */
50 
51 #endif /* NO_MUTEX */
52 
53 
54 #ifdef __cplusplus
55 extern "C" {
56 #endif /* C++ */
57 
58 
61  ErrCode MutexInit (MutexId* pMId);
62 
65  ErrCode MutexDestroy (MutexId* pMId);
66 
70  ErrCode MutexLock (MutexId* pMId);
71 
76  ErrCode MutexTryLock (MutexId* pMId);
77 
80  ErrCode MutexUnlock (MutexId* pMId);
81 
82 
83 #ifdef __cplusplus
84 };
85 #endif /* C++ */
86 
87 #endif /* mutex.h */