Share via


TryEnterCriticalSection 関数 (synchapi.h)

ブロックせずにクリティカル セクションの入力を試します。 呼び出しが成功すると、呼び出し元のスレッドはクリティカル セクションの所有権を取得します。

構文

BOOL TryEnterCriticalSection(
  [in, out] LPCRITICAL_SECTION lpCriticalSection
);

パラメーター

[in, out] lpCriticalSection

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

戻り値

クリティカル セクションが正常に入力された場合、または現在のスレッドがクリティカル セクションを既に所有している場合、戻り値は 0 以外です。

別のスレッドが既にクリティカル セクションを所有している場合、戻り値は 0 です。

注釈

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

共有リソースを相互に排他的に使用できるようにするために、各スレッドは EnterCriticalSection 関数または TryEnterCriticalSection 関数を呼び出してクリティカル セクションの所有権を要求してから、保護されたリソースを使用するコードのセクションを実行します。 違いは、 TryEnterCriticalSection はクリティカル セクションの所有権を取得したかどうかに関係なく、直ちに戻り、 EnterCriticalSection はスレッドがクリティカル セクションの所有権を取得できるようになるまでブロックすることです。 保護されたコードの実行が完了すると、スレッドは LeaveCriticalSection 関数を使用して所有権を放棄し、別のスレッドが所有者になり、保護されたリソースにアクセスできるようにします。 スレッドは、クリティカル セクションに入るたびに LeaveCriticalSection を 1 回呼び出す必要があります。

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

クリティカル セクションの所有権がある間にスレッドが終了した場合、クリティカル セクションの状態は未定義です。

この関数を使用するアプリケーションをコンパイルするには、 _WIN32_WINNT を 以降として 0x0400 定義します。 詳細については、「 Windows ヘッダーの使用」を参照してください。

要件

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

LeaveCriticalSection

同期関数

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