#include "dkcThreadLock.h"
#include "dkcStdio.h"
dkcThreadLock.cのインクルード依存関係図
マクロ定義 | |
#define | DKUTIL_C_THREAD_LOCK_C |
関数 | |
DKC_THREAD_LOCK *WINAPI | dkcAllocThreadLock () |
int WINAPI | dkcFreeThreadLock (DKC_THREAD_LOCK **pp) |
void WINAPI | dkcThreadLock_Lock (DKC_THREAD_LOCK *p) |
void WINAPI | dkcThreadLock_Unlock (DKC_THREAD_LOCK *p) |
BOOL WINAPI | dkcThreadLockIsLockedByThisThread (DKC_THREAD_LOCK *p) |
dkcThreadLock.c で定義されています。
|
dkcThreadLock.c の 8 行で定義されています。 |
|
dkcThreadLock.c の 15 行で定義されています。 参照先 dkcAllocate(), DWORD, と NULL. 参照元 dkcFileCopyEx(). 00015 { 00016 DKC_THREAD_LOCK *p = (DKC_THREAD_LOCK *)dkcAllocate(sizeof(DKC_THREAD_LOCK)); 00017 if(NULL==p){ 00018 return NULL; 00019 } 00020 InitializeCriticalSection(&(p->m_csCriticalSection)); 00021 p->m_dwLockedThread = (DWORD)-1; 00022 p->mLockCount = 0; 00023 00024 return p; 00025 }
|
|
dkcThreadLock.c の 27 行で定義されています。 参照先 dkcFree(), dkcmFORCE_NOT_ASSERT, と NULL. 参照元 dkcFileCopyEx(). 00027 { 00028 if(NULL==pp || NULL==*pp){ 00029 return edk_ArgumentException; 00030 } 00031 00032 DeleteCriticalSection(&((*pp)->m_csCriticalSection)); 00033 00034 if ((*pp)->mLockCount!=0) { 00035 dkcmFORCE_NOT_ASSERT("dkcThreadLockをLockした回数だけUnlockしないまま終了している"); 00036 } 00037 return dkcFree((void **)pp); 00038 }
|
|
dkcThreadLock.c の 40 行で定義されています。 参照先 dkcmFORCE_NOT_ASSERT, と NULL. 参照元 dkcFileCopyEx(). 00040 { 00041 dkcmFORCE_NOT_ASSERT(NULL==p); 00042 00043 EnterCriticalSection(&(p->m_csCriticalSection)); 00044 00045 p->m_dwLockedThread = GetCurrentThreadId(); 00046 // ↑異なるスレッドからここに入ってくることはできない 00047 // (CriticalSectionの定義より) 00048 p->mLockCount++; 00049 }
|
|
dkcThreadLock.c の 52 行で定義されています。 参照先 dkcmFORCE_NOT_ASSERT, dkcmNOT_ASSERT, DWORD, と NULL. 参照元 dkcFileCopyEx(). 00052 { 00053 dkcmFORCE_NOT_ASSERT(NULL==p); 00054 00055 if (p->mLockCount==0){ 00056 dkcmNOT_ASSERT("CriticalSectionManagerをEnterしていないのにLeaveしている"); 00057 } 00058 00059 if ((--(p->mLockCount))==0) { 00060 p->m_dwLockedThread = (DWORD)-1; 00061 } 00062 // ↑Leaveした直後に他スレッドがEnterする可能性がある 00063 LeaveCriticalSection(&(p->m_csCriticalSection)); 00064 }
|
|
dkcThreadLock.c の 71 行で定義されています。 参照先 dkcmFORCE_NOT_ASSERT, DWORD, と NULL. 00072 { 00073 DWORD dw; 00074 00075 dkcmFORCE_NOT_ASSERT(NULL==p); 00076 00077 dw = GetCurrentThreadId(); 00078 return (p->m_dwLockedThread == dw); 00079 }
|