00001 00013 #ifndef DKUTIL_C_THREAD_LOCK_H 00014 #define DKUTIL_C_THREAD_LOCK_H 00015 00016 #include "dkcOSIndependent.h" 00017 00018 #ifdef WIN32 00019 typedef DWORD dkctThreadID; 00020 #define dkcdINVALID_THREAD_ID ((dkctThreadID)(-1)) 00021 00022 typedef struct dkc_ThreadLock{ 00023 CRITICAL_SECTION m_csCriticalSection; 00025 dkctThreadID mLockedThread ; 00027 int mLockCount ; 00028 }DKC_THREAD_LOCK; 00029 00030 #else 00031 00032 typedef void *dkctThreadID; 00033 #define dkcdINVALID_THREAD_ID ((dkctThreadID)(NULL)) 00034 00035 typedef struct dkc_ThreadLock{ 00036 pthread_mutex_t mMutex; 00038 dkctThreadID mLockedThread ; 00040 int mLockCount ; 00041 }DKC_THREAD_LOCK; 00042 00043 00044 #endif 00045 00046 DKC_INLINE dkctThreadID dkcGetThreadID(){ 00047 #ifdef WIN32 00048 return GetCurrentThreadId(); 00049 #else 00050 return pthread_self(); 00051 #endif 00052 } 00053 00054 DKC_EXTERN DKC_THREAD_LOCK * WINAPI dkcAllocThreadLock(); 00055 00056 DKC_EXTERN int WINAPI dkcFreeThreadLock(DKC_THREAD_LOCK **); 00057 00058 DKC_EXTERN void WINAPI dkcThreadLock_Lock(DKC_THREAD_LOCK *); 00059 00060 00061 DKC_EXTERN void WINAPI dkcThreadLock_Unlock(DKC_THREAD_LOCK *); 00062 00063 00064 //DKC_EXTERN BOOL WINAPI dkcThreadLockIsInited(DKC_THREAD_LOCK *); 00065 00066 DKC_EXTERN BOOL WINAPI dkcThreadLockIsLockedByThisThread(DKC_THREAD_LOCK *); 00067 #define dkcThreadLockIsLockedByCurrentThread(p) dkcThreadLockIsLockedByThisThread(p) 00068 /* 00069 DKC_EXTERN void WINAPI dkcThreadLockInit(); 00070 00071 DKC_EXTERN void WINAPI dkcThreadLock_Lock(); 00072 00073 DKC_EXTERN void WINAPI dkcThreadLock_Unlock(); 00074 00075 DKC_EXTERN void WINAPI dkcThreadLockEnd(); 00076 00077 DKC_EXTERN BOOL WINAPI dkcThreadLockIsInited(); 00078 00079 DKC_EXTERN BOOL WINAPI dkcThreadLockIsLockedByThisThread(); 00080 */ 00081 #if !defined( DKUTIL_C_THREAD_LOCK_C ) && defined(USE_DKC_INDEPENDENT_INCLUDE) 00082 # include "dkcThreadLock.c" 00083 #endif 00084 00085 #endif //end of include once