Share via


LeaveCriticalSection 関数 (synchapi.h)

指定したクリティカル セクション オブジェクトの所有権を解放します。

構文

void LeaveCriticalSection(
  [in, out] LPCRITICAL_SECTION lpCriticalSection
);

パラメーター

[in, out] lpCriticalSection

クリティカル セクション オブジェクトへのポインター。

戻り値

なし

解説

1 つのプロセスのスレッドは、相互排他同期にクリティカル セクション オブジェクトを使用できます。 プロセスは、クリティカル セクション オブジェクトによって使用されるメモリを割り当てる役割を担います。これは、 CRITICAL_SECTION型の変数を宣言することによって実行できます。 クリティカル セクションを使用する前に、プロセスの一部のスレッドで InitializeCriticalSection または InitializeCriticalSectionAndSpinCount 関数を呼び出してオブジェクトを初期化する必要があります。

スレッドは 、EnterCriticalSection または TryEnterCriticalSection 関数を使用して、クリティカル セクション オブジェクトの所有権を取得します。 その所有権を解放するには、スレッドがクリティカル セクションに入るたびに LeaveCriticalSection を 1 回呼び出す必要があります。

指定したクリティカル セクション オブジェクトの所有権がないときにスレッドが LeaveCriticalSection を呼び出すと、 EnterCriticalSection を使用して別のスレッドが無期限に待機する可能性があるエラーが発生します。

LeaveCriticalSection は、クリティカル セクション オブジェクトの所有権が解放された後、指定された CRITICAL_SECTION 構造体にアクセスしません。

プロセスのすべてのスレッドは 、DeleteCriticalSection 関数を使用して、クリティカル セクション オブジェクトが初期化されたときに割り当てられたシステム リソースを解放できます。 この関数が呼び出されると、クリティカル セクション オブジェクトを同期に使用できなくなります。

LeaveCriticalSection を使用する例については、「クリティカル セクション オブジェクトの使用」を参照してください。

要件

要件
サポートされている最小のクライアント Windows XP [デスクトップ アプリ | UWP アプリ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー synchapi.h (Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2 の Windows.h を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

クリティカル セクション オブジェクト

DeleteCriticalSection

EnterCriticalSection

InitializeCriticalSection

InitializeCriticalSectionAndSpinCount

同期関数

TryEnterCriticalSection

VBS エンクレーブで使用できる Vertdll API