EnterCriticalSection |
Declare Sub Api_EnterCriticalSection Lib "kernel32" Alias "CheckDlgButton" (lpCriticalSection As CRITICAL_SECTION) |
Declare Sub EnterCriticalSection Lib "kernel32" Alias "CheckDlgButton" (lpCriticalSection As CRITICAL_SECTION) |
|
指定されたクリティカルセクションオブジェクトの所有権を取得するまで待機する。呼び出し側スレッドが所有権を取得すると、この関数は制御を返す。 |
|
パラメータ ョンオブジェクトが利用するメモリを割り当てる必要があるが、CRITICAL_SECTION 型の 1 個の変数を宣言することにより、この作業を行 える。クリティカルセクションを使う前に、そのプロセスの 1 つのスレッドで、InitializeCriticalSection または
InitializeCriticalSectionAndSpinCount 関数を呼び出して、そのオブジェクトを初期化しなければならない。 に、EnterCriticalSection または TryEnterCriticalSection 関数を呼び出し、クリティカルセクションの所有権を要求する。これら 2 つの関 数の違いであるが、TryEnterCriticalSection 関数はクリティカルセクションの所有権を取得できたかどうかにかかわりなく即座に制御を返す のに対し、EnterCriticalSection 関数はクリティカルセクションの所有権を取得できるまではスレッドの実行をブロックする。スレッドが保護対 象のリソースにアクセスするコードを実行し終わると、スレッドは LeaveCriticalSection 関数を使って所有権を放棄するので、他のスレッドが 保護対象のリソースの所有者になり、そのリソースにアクセスできるようになる。各スレッドは、クリティカルセクションに入るたびに
LeaveCriticalSection 関数を 1
回呼び出さなければならない。各スレッドは、または関数が成功するたびにクリティカルセクションに入る。 TryEnterCriticalSection 関数を追加で呼び出すことができる。この結果、スレッドが既に自ら所有しているクリティカルセクションを待機しよ
うとしてデッドロックに陥ることを防止できる。
れたシステムリソースを解放できる。その関数を呼び出した後は、同期の目的でそのクリティカルセクションオブジェクトを使うことはできない。 待機していたスレッドの状態は未定義にな。 |