メインページ | アルファベット順一覧 | 構成 | ファイル一覧 | 構成メンバ | ファイルメンバ | 関連ページ

dkcThreadLock.c

#include "dkcThreadLock.h"
#include "dkcStdio.h"

dkcThreadLock.cのインクルード依存関係図

Include dependency graph

ソースコードを見る。

マクロ定義

#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)


説明

作者:
d金魚
から:
2004/3/xx

dkcThreadLock.c で定義されています。


マクロ定義

#define DKUTIL_C_THREAD_LOCK_C
 

dkcThreadLock.c8 行で定義されています。


関数

DKC_THREAD_LOCK* WINAPI dkcAllocThreadLock  ) 
 

dkcThreadLock.c15 行で定義されています。

参照先 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 }

int WINAPI dkcFreeThreadLock DKC_THREAD_LOCK **  pp  ) 
 

dkcThreadLock.c27 行で定義されています。

参照先 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 }

void WINAPI dkcThreadLock_Lock DKC_THREAD_LOCK *  p  ) 
 

dkcThreadLock.c40 行で定義されています。

参照先 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 }

void WINAPI dkcThreadLock_Unlock DKC_THREAD_LOCK *  p  ) 
 

dkcThreadLock.c52 行で定義されています。

参照先 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 }

BOOL WINAPI dkcThreadLockIsLockedByThisThread DKC_THREAD_LOCK *  p  ) 
 

dkcThreadLock.c71 行で定義されています。

参照先 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 }


dkutil_cに対してTue Feb 22 02:03:23 2005に生成されました。 doxygen 1.3.6