#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 行で定義されています。 |
1.3.6