#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, 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 }
|
1.3.6