ExInitializePushLock 関数 (wdm.h)

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

構文

void ExInitializePushLock(
  [Out] PEX_PUSH_LOCK PushLock
);

パラメーター

[Out] PushLock

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

戻り値

なし

解説

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

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

プッシュ ロックには、ERESOURCE 構造体よりも次の利点があります。

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

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

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

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

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

要件

要件
サポートされている最小のクライアント Windows 10 Version 1809
Header wdm.h