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

Инициализирует переменную push-блокировки.

Синтаксис

void ExInitializePushLock(
  [Out] PEX_PUSH_LOCK PushLock
);

Параметры

[Out] PushLock

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

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

None

Remarks

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

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

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

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

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

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

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

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

Требования

Требование Значение
Минимальная версия клиента Windows 10, версия 1809
Верхняя часть wdm.h