InitializeCriticalSectionEx

スピン カウントとオプションのフラグを指定してクリティカルセクション オブジェクトを初期化する。

InitializeCriticalSectionEx lpCriticalSection, dwSpinCount, Flags

lpCriticalSection : [var] クリティカルセクション オブジェクトへのポインタ。
dwSpinCount : [int] クリティカルセクション オブジェクトのスピン カウント。シングル プロセッサ システムではスピン カウントは無視されクリティカルセクションのスピン カウントは 0 に設定される。マルチ プロセッサ システムでは、クリティカルセクションが使用できないとき、呼び出し側スレッドはクリティカルセクションに関連付けられたセマフォでの待機に入る前に dwSpinCount 回スピンする。スピン中にクリティカルセクションが空けば、呼び出し側スレッドは待機を回避する。
Flags : [int] このパラメータは 0 または次の値にできる。

(プラグイン / モジュール : kernel32.dll)

解説

スピン カウントとオプションのフラグを指定してクリティカルセクション オブジェクトを初期化する。

[戻り値]
関数が成功した場合、戻り値は 0 以外となる。関数が失敗した場合、戻り値は 0 となる。拡張エラー情報を取得するには
GetLastError を呼ぶ。

[備考]
単一プロセスのスレッドは、相互排他同期にクリティカルセクション
オブジェクトを使える。スレッドがクリティカルセクションの所有権を得る順序については保証されないが、システムはすべてのスレッドに公平である。プロセスはクリティカルセクション
オブジェクトで使うメモリの確保に責任を持ち、CRITICAL_SECTION
型の変数を宣言して確保できる。クリティカルセクションを使う前に、プロセスのいずれかのスレッドがオブジェクトを初期化しなければならない。後から
SetCriticalSectionSpinCount 関数でスピン カウントを変更できる。クリティカルセクション
オブジェクトが初期化されると、プロセスのスレッドは
EnterCriticalSection、TryEnterCriticalSection、LeaveCriticalSection
関数でオブジェクトを指定し、共有リソースへの相互排他アクセスを提供できる。異なるプロセスのスレッド間で同様の同期を行うにはミューテックス
オブジェクトを使う。クリティカルセクション
オブジェクトは移動やコピーができない。プロセスはオブジェクトを変更してはならず、論理的に不透明なものとして扱う必要がある。クリティカルセクションの管理にはクリティカルセクション関数のみを使う。クリティカルセクションの使用を終えたら
DeleteCriticalSection
関数を呼ぶ。再初期化する前に削除しなければならない。既に初期化されたクリティカルセクションを初期化すると動作は未定義となる。スピン
カウントは、競合が激しくなり得る短時間のクリティカルセクションに有用である。最悪の場合として、SMP システム上のアプリケーションが
2~3
個のスレッドで常にヒープからメモリを確保・解放し、ヒープをクリティカルセクションでシリアライズしている状況を考える。最悪のケースではクリティカルセクションの競合が継続し、各スレッドが
WaitForSingleObject の処理負荷の高い呼び出しを行う。しかしスピン
カウントを適切に設定すれば、呼び出し側スレッドは競合が発生してもすぐに WaitForSingleObject
を呼ばず、スピン中にクリティカルセクションが解放されれば所有権を取得できる。短時間のクリティカルセクションで小さいスピン
カウントを選ぶことでパフォーマンスは大きく向上できる。ヒープ マネージャはヒープごとのクリティカルセクションにおよそ 4000 のスピン
カウントを使っている。これにより、ほとんどの最悪ケースで優れたパフォーマンスとスケーラビリティが得られる。

情報

プラグイン / モジュールkernel32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の kernel32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_kernel32_gen2.hs