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 等例程,以判斷目前的線程是否具有 resource 的獨佔存取權。)
  • 無法以遞歸方式取得推播鎖定。

若要取得或釋放獨佔存取的推送鎖定,請分別呼叫 ExAcquirePushLockExclusiveExReleasePushLockExclusive

若要取得或釋放共用存取的推送鎖定,請分別呼叫 ExAcquirePushLockSharedExReleasePushLockShared

規格需求

需求
最低支援的用戶端 Windows 10 版本 1809
標頭 wdm.h