#include "dkcOSIndependent.h"
dkcThreadLock.hのインクルード依存関係図
このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。
関数 | |
DKC_EXTERN DKC_THREAD_LOCK *WINAPI | dkcAllocThreadLock () |
DKC_EXTERN int WINAPI | dkcFreeThreadLock (DKC_THREAD_LOCK **) |
DKC_EXTERN void WINAPI | dkcThreadLock_Lock (DKC_THREAD_LOCK *) |
DKC_EXTERN void WINAPI | dkcThreadLock_Unlock (DKC_THREAD_LOCK *) |
DKC_EXTERN BOOL WINAPI | dkcThreadLockIsLockedByThisThread (DKC_THREAD_LOCK *) |
d金魚
dkcThreadLock.h で定義されています。
|
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, edk_ArgumentException, と 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 行で定義されています。 参照先 BOOL, 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 } |