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