Share via


InitializeCriticalSection 関数 (synchapi.h)

クリティカル セクション オブジェクトを初期化します。

構文

void InitializeCriticalSection(
  [out] LPCRITICAL_SECTION lpCriticalSection
);

パラメーター

[out] lpCriticalSection

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

戻り値

この関数は値を返しません。

Windows Server 2003 および Windows XP: メモリ不足の状況では、 InitializeCriticalSection によって STATUS_NO_MEMORY 例外が発生する可能性があります。 Windows Vista 以降、この例外は排除され、メモリ不足の状況でも InitializeCriticalSection は常に成功します。

注釈

1 つのプロセスのスレッドは、相互排他同期にクリティカル セクション オブジェクトを使用できます。 スレッドがクリティカル セクションの所有権を取得する順序については保証されませんが、システムはすべてのスレッドに公平です。

プロセスは、クリティカル セクション オブジェクトによって使用されるメモリを割り当てる役割を担います。これを行うには、 CRITICAL_SECTION型の変数を宣言します。 クリティカル セクションを使用する前に、プロセスの一部のスレッドで オブジェクトを初期化する必要があります。

クリティカル セクション オブジェクトが初期化されると、プロセスのスレッドは 、EnterCriticalSectionTryEnterCriticalSection、または LeaveCriticalSection 関数でオブジェクトを指定して、共有リソースへの相互排他的アクセスを提供できます。 異なるプロセスのスレッド間で同様の同期を行う場合は、ミューテックス オブジェクトを使用します。

クリティカル セクション オブジェクトを移動またはコピーすることはできません。 また、プロセスはオブジェクトを変更する必要はありませんが、論理的に不透明として扱う必要があります。 クリティカル セクション オブジェクトを管理するには、クリティカル セクション関数のみを使用します。 クリティカル セクションの使用が完了したら、 DeleteCriticalSection 関数を呼び出します。

クリティカル セクション オブジェクトは、再初期化する前に削除する必要があります。 既に初期化されているクリティカル セクションを初期化すると、未定義の動作が発生します。

要件

要件
サポートされている最小のクライアント 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

関連項目

CreateMutex

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

DeleteCriticalSection

EnterCriticalSection

InitializeCriticalSectionAndSpinCount

LeaveCriticalSection

同期関数

TryEnterCriticalSection

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