メインページ | 構成 | ファイル一覧 | 構成メンバ | ファイルメンバ | 関連ページ

dkcThreadLock.c

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

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

Include dependency graph

ソースコードを見る。

関数

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


説明

d金魚
から:
2004/3/xx

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


関数

void WINAPI dkcThreadLock_Lock  ) 
 

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

参照先 Enter().

参照元 dkcFileCopyEx().

00095                                 {
00096     Enter();
00097 }

void WINAPI dkcThreadLock_Unlock  ) 
 

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

参照先 Leave().

参照元 dkcFileCopyEx().

00099                                   {
00100     Leave();
00101 }

void WINAPI dkcThreadLockEnd  ) 
 

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

参照先 End().

00103                               {
00104     End();
00105 }

void WINAPI dkcThreadLockInit  ) 
 

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

参照先 Init().

00091                                {
00092     Init();
00093 }

BOOL WINAPI dkcThreadLockIsInited  ) 
 

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

参照先 BOOL, と gInited.

00087 {
00088     return gInited;
00089 }

BOOL WINAPI dkcThreadLockIsLockedByThisThread  ) 
 

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

参照先 BOOL, DWORD, と g_dwLockedThread.

00081                                                {
00082     DWORD dw = GetCurrentThreadId();
00083     return (g_dwLockedThread == dw);
00084 }

void End  )  [static]
 

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

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

void Enter  )  [static]
 

CriticalSectionに入る.

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

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

void Init  )  [static]
 

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

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

void Leave  )  [static]
 

CriticalSectionから抜ける.

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

参照先 dkcmFORCE_NOT_ASSERT, dkcmNOT_ASSERT, DWORD, FALSE, g_csCriticalSection, g_dwLockedThread, gInited, と gLockCount.

参照元 dkcThreadLock_Unlock().

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 }


変数

CRITICAL_SECTION g_csCriticalSection [static]
 

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

参照元 End(), Enter(), Init(), と Leave().

DWORD g_dwLockedThread = 0 [static]
 

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

参照元 dkcThreadLockIsLockedByThisThread(), Enter(), Init(), と Leave().

BOOL gInited = FALSE [static]
 

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

参照元 dkcThreadLockIsInited(), End(), Enter(), Init(), と Leave().

int gLockCount = 0 [static]
 

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

参照元 End(), Enter(), Init(), と Leave().


dkutil_cに対してSun Jul 18 22:46:29 2004に生成されました。 doxygen 1.3.6