アットウィキロゴ

TclpInitLock

概要

Win32APIを使って、joinLock, initLock, masterLock の変数を初期化する。
initLockを使ってクリティカルセクションに入って関数を抜ける。

引数

無し

戻り値

無し。

処理


 initが0でないとき、初期化処理を行う
 if (!init) {
  initを1に
  init = 1;
  joinLock, initLock, masterLock を InitializeCriticalSection で初期化する。InitializeCriticalSectionはWindows API
  InitializeCriticalSection(&joinLock);
  InitializeCriticalSection(&initLock);
  InitializeCriticalSection(&masterLock);
 }
 initLockを使ってクリティカルセクションに入る。
 EnterCriticalSection(&initLock);



ソース

 /*
  *----------------------------------------------------------------------
  *
  * TclpInitLock
  *
  *	This procedure is used to grab a lock that serializes initialization
  *	and finalization of Tcl. On some platforms this may also initialize
  *	the mutex used to serialize creation of more mutexes and thread local
  *	storage keys.
  *
  * Results:
  *	None.
  *
  * Side effects:
  *	Acquire the initialization mutex.
  *
  *----------------------------------------------------------------------
  */
 
 void
 TclpInitLock(void)
 {
     if (!init) {
 	/*
 	 * There is a fundamental race here that is solved by creating the
 	 * first Tcl interpreter in a single threaded environment. Once the
 	 * interpreter has been created, it is safe to create more threads
 	 * that create interpreters in parallel.
 	 */
 
 	init = 1;
 	InitializeCriticalSection(&joinLock);
 	InitializeCriticalSection(&initLock);
 	InitializeCriticalSection(&masterLock);
     }
     EnterCriticalSection(&initLock);
 }
最終更新:2011年11月10日 22:14