#include "dkcThreadLock.h"
#include "dkcStdio.h"
dkcThreadLock.cのインクルード依存関係図
関数 | |
void | Init () |
void | End () |
void | Enter () |
CriticalSectionに入る. | |
void | Leave () |
CriticalSectionから抜ける. | |
BOOL WINAPI | dkcThreadLockIsLockedByThisThread () |
BOOL WINAPI | dkcThreadLockIsInited () |
void WINAPI | dkcThreadLockInit () |
void WINAPI | dkcThreadLock_Lock () |
void WINAPI | dkcThreadLock_Unlock () |
void WINAPI | dkcThreadLockEnd () |
変数 | |
CRITICAL_SECTION | g_csCriticalSection |
DWORD | g_dwLockedThread = 0 |
int | gLockCount = 0 |
BOOL | gInited = FALSE |
dkcThreadLock.c で定義されています。
|
dkcThreadLock.c の 95 行で定義されています。 参照先 Enter(). 参照元 dkcFileCopyEx().
00095 { 00096 Enter(); 00097 } |
|
dkcThreadLock.c の 99 行で定義されています。 参照先 Leave(). 参照元 dkcFileCopyEx().
00099 { 00100 Leave(); 00101 } |
|
dkcThreadLock.c の 103 行で定義されています。 参照先 End().
00103 { 00104 End(); 00105 } |
|
dkcThreadLock.c の 91 行で定義されています。 参照先 Init().
00091 { 00092 Init(); 00093 } |
|
dkcThreadLock.c の 86 行で定義されています。
00087 { 00088 return gInited; 00089 } |
|
dkcThreadLock.c の 81 行で定義されています。 参照先 BOOL, DWORD, と g_dwLockedThread.
00081 { 00082 DWORD dw = GetCurrentThreadId(); 00083 return (g_dwLockedThread == dw); 00084 } |
|
dkcThreadLock.c の 33 行で定義されています。 参照先 dkcmNOT_ASSERT, FALSE, g_csCriticalSection, gInited, gLockCount, と ODS. 参照元 dkcThreadLockEnd().
00033 { 00034 { 00035 if(FALSE==gInited){return;} 00036 } 00037 DeleteCriticalSection(&g_csCriticalSection); 00038 gInited = FALSE; 00039 memset(&g_csCriticalSection,0,sizeof(g_csCriticalSection)); 00040 if (gLockCount!=0) { 00041 dkcmNOT_ASSERT("dkcThreadLockをLockした回数だけUnlockしないまま終了している"); 00042 } 00043 # ifdef DEBUG 00044 ODS("dkcLockThreadEnd\n"); 00045 # endif 00046 } |
|
CriticalSectionに入る.
dkcThreadLock.c の 50 行で定義されています。 参照先 dkcmFORCE_NOT_ASSERT, FALSE, g_csCriticalSection, g_dwLockedThread, gInited, と gLockCount. 参照元 dkcThreadLock_Lock().
00050 { 00051 if(FALSE==gInited){ 00052 dkcmFORCE_NOT_ASSERT("dkcThreadLockInit()で初期化していない"); 00053 return; 00054 } 00055 EnterCriticalSection(&g_csCriticalSection); 00056 00057 g_dwLockedThread = GetCurrentThreadId(); 00058 // ↑異なるスレッドからここに入ってくることはできない 00059 // (CriticalSectionの定義より) 00060 gLockCount++; 00061 00062 } |
|
dkcThreadLock.c の 20 行で定義されています。 参照先 DWORD, g_csCriticalSection, g_dwLockedThread, gInited, gLockCount, ODS, と TRUE. 参照元 dkcThreadLockInit().
00020 { 00021 { 00022 if(TRUE==gInited){return;} 00023 } 00024 InitializeCriticalSection(&g_csCriticalSection); 00025 g_dwLockedThread = (DWORD)-1; 00026 gLockCount = 0; 00027 # ifdef DEBUG 00028 ODS("dkcLockThreadInit\n"); 00029 # endif 00030 gInited = TRUE; 00031 } |
|
CriticalSectionから抜ける.
dkcThreadLock.c の 65 行で定義されています。 参照先 dkcmFORCE_NOT_ASSERT, dkcmNOT_ASSERT, DWORD, FALSE, g_csCriticalSection, g_dwLockedThread, gInited, と gLockCount.
00065 { 00066 if(FALSE==gInited){ 00067 dkcmFORCE_NOT_ASSERT("dkcThreadLockInit()で初期化していない"); 00068 return; 00069 } 00070 if (gLockCount==0){ 00071 dkcmNOT_ASSERT("CriticalSectionManagerをEnterしていないのにLeaveしている"); 00072 } 00073 00074 if (--gLockCount==0) { 00075 g_dwLockedThread = (DWORD)-1; 00076 } 00077 // ↑Leaveした直後に他スレッドがEnterする可能性がある 00078 LeaveCriticalSection(&g_csCriticalSection); 00079 } |
|
dkcThreadLock.c の 11 行で定義されています。 |
|
dkcThreadLock.c の 12 行で定義されています。 参照元 dkcThreadLockIsLockedByThisThread(), Enter(), Init(), と Leave(). |
|
dkcThreadLock.c の 16 行で定義されています。 参照元 dkcThreadLockIsInited(), End(), Enter(), Init(), と Leave(). |
|
dkcThreadLock.c の 13 行で定義されています。 |