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

dkcThreadLock.h

スレッドのロック(CriticalSection) [詳細]

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


説明

スレッドのロック(CriticalSection)

作者:
d金魚
から:
2004/3/22
覚え書き:
Critical SectionのWrapper いずれmulti platformにしたい

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


関数

DKC_EXTERN 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 }

DKC_EXTERN int WINAPI dkcFreeThreadLock DKC_THREAD_LOCK **   ) 
 

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 }

DKC_EXTERN void WINAPI dkcThreadLock_Lock DKC_THREAD_LOCK *   ) 
 

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 }

DKC_EXTERN void WINAPI dkcThreadLock_Unlock DKC_THREAD_LOCK *   ) 
 

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 }

DKC_EXTERN BOOL WINAPI dkcThreadLockIsLockedByThisThread DKC_THREAD_LOCK *   ) 
 

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

参照先 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に対してSat Sep 10 09:25:25 2005に生成されました。  doxygen 1.4.4