Поделиться через


Функция ExInitializePushLock (wdm.h)

Инициализирует переменную принудительной блокировки.

Синтаксис

void ExInitializePushLock(
  [Out] PEX_PUSH_LOCK PushLock
);

Параметры

[Out] PushLock

Указатель на хранилище, предоставленное вызывающей стороной, которое должно быть по крайней мере значением sizeof(EX_PUSH_LOCK), чтобы инициализировать переменную принудительной блокировки. Хранилище должно быть 4-байтовое выравнивание на 32-разрядных платформах, а 8-байтовое выравнивание на 64-разрядных платформах.

Возвращаемое значение

Никакой

Замечания

Блокировки push-уведомлений похожи на структуры ERESOURCE (также называемые "ресурсы") следующими способами:

  • Push-блокировки можно использовать для синхронизации набором потоков.
  • Блокировки push-уведомлений можно получить для общего или эксклюзивного доступа.
  • Хотя вызывающий объект предоставляет хранилище для переменной принудительной блокировки, структура EX_PUSH_LOCK непрозрачна: то есть ее члены зарезервированы для использования системы.

Push-блокировки предлагают следующие преимущества по сравнению со структурами ERESOURCE:

  • При получении принудительной блокировки в основном для общего доступа они более эффективны, чем структуры ERESOURCE.
  • Хранилище для push-блокировок можно выделить из страничного или непагированного пула. Структуры ERESOURCE должны быть выделены только из непагированного пула.
  • EX_PUSH_LOCK структуры гораздо меньше, чем структуры ERESOURCE.

При сравнении со структурами ERESOURCE следующие недостатки имеют следующие недостатки:

  • Алгоритм предоставления эксклюзивного доступа не является справедливым для всех потоков. Если существует высокий уровень конфликтов с монопольной блокировкой, нет никаких гарантий в том порядке, в котором потоки будут предоставлены монопольный доступ.
  • Нет процедур поддержки для определения текущего владельца принудительной блокировки. (Пользователи структур ERESOURCE могут вызывать такие подпрограммы, как ExIsResourceAcquiredExclusiveLite, чтобы определить, имеет ли текущий поток эксклюзивный доступ к ресурсу.)
  • Принудительная блокировка не может быть получена рекурсивно.

Чтобы получить или освободить блокировку push-уведомлений для эксклюзивного доступа, вызовите ExAcquirePushLockExclusive или ExReleasePushLockExclusiveсоответственно.

Чтобы получить или освободить блокировку push-уведомлений для общего доступа, вызовите ExAcquirePushLockShared или ExReleasePushLockSharedсоответственно.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 10 версии 1809
заголовка wdm.h