Функция 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 |