次の方法で共有


ExInitializePushLock 関数 (wdm.h)

プッシュ ロック変数を初期化します。

構文

void ExInitializePushLock(
  [Out] PEX_PUSH_LOCK PushLock
);

パラメーター

[Out] PushLock

プッシュ ロック変数を初期化するには、呼び出し元が指定したストレージへのポインター 。少なくとも sizeof(EX_PUSH_LOCK) の値である必要があります。 ストレージは、32 ビット プラットフォームでは 4 バイトにアラインされ、8 バイトは 64 ビット プラットフォームでアラインされている必要があります。

戻り値

何一つ

備考

プッシュ ロックは、次の点で ERESOURCE 構造体 ("リソース" とも呼ばれます) に似ています。

  • プッシュ ロックは、一連のスレッドによる同期に使用できます。
  • プッシュ ロックは、共有アクセスまたは排他アクセスのために取得できます。
  • 呼び出し元はプッシュ ロック変数のストレージを提供しますが、EX_PUSH_LOCK構造体は不透明です。つまり、そのメンバーはシステム用に予約されています。

プッシュ ロックは、ERESOURCE 構造体よりも次の利点を提供します。

  • プッシュ ロックは、主に共有アクセス用に取得される場合、ERESOURCE 構造体よりも効率的です。
  • プッシュ ロックのストレージは、ページ プールまたは非ページ プールから割り当てることができます。 ERESOURCE 構造体は、非ページ プールからのみ割り当てる必要があります。
  • EX_PUSH_LOCK構造体は、ERESOURCE 構造体よりもはるかに小さいです。

プッシュ ロックには、ERESOURCE 構造体と比較すると、次のような欠点があります。

  • 排他的アクセスを許可するためのアルゴリズムは、すべてのスレッドに公平ではありません。 排他ロック競合のレベルが高い場合、スレッドに排他アクセスが許可される順序に関する保証はありません。
  • プッシュ ロックの現在の所有者を決定するためのサポート ルーチンはありません。 (ERESOURCE 構造体のユーザーは、ExIsResourceAcquiredExclusiveLite などのルーチンを呼び出して、現在のスレッドがリソースに排他的にアクセスできるかどうかを判断できます)。
  • プッシュ ロックは再帰的に取得できません。

排他的アクセスのプッシュ ロックを取得または解放するには、ExAcquirePushLockExclusive呼び出すか、ExReleasePushLockExclusiveします。

共有アクセスのプッシュ ロックを取得または解放するには、ExAcquirePushLockShared呼び出すか、ExReleasePushLockSharedします。

必要条件

要件 価値
サポートされる最小クライアント Windows 10 バージョン 1809
ヘッダー wdm.h