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


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

Функция KeRcuReadLock вводит критически важный раздел RCU (read-Copy-Update) в домене RCU по умолчанию. Эта функция закрепляет вызывающий поток к текущему процессору и предотвращает его предопределение планировщиком.

Синтаксис

VOID KeRcuReadLock();

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

None

Замечания

KeRcuReadLock обеспечивает низкую стоимость синхронизации для чтения общих структур данных без традиционных затрат на блокировку. Он обращается только к данным локально к текущему ЦП, что делает его чрезвычайно эффективным.

Критически важные разделы RCU позволяют нескольким потокам одновременно получать доступ к общим структурам данных, обеспечивая безопасное обновление данных с помощью протоколов RCU. Критически важные разделы RCU можно вложить.

KeRcuReadLock всегда должен быть связан с соответствующим вызовом KeRcuReadUnlock.

Эта функция не может завершиться ошибкой и всегда завершается успешно.

В критическом разделе RCU на стороне чтения:

  • Вызывающий поток гарантирует, что структуры данных, защищенные RCU, не будут восстановлены.
  • Несколько читателей могут одновременно получать доступ к тем же данным, не блокируя друг друга.
  • Поток должен получить доступ только к структурам данных, защищенным RCU, с помощью соответствующих примитивов расшифровки RCU.
  • Поток не должен выполнять операции, которые могут привести к длительным задержкам.

Эту функцию можно вызвать из любого IRQL. Если он вызывается ниже DISPATCH_LEVEL, функция автоматически вызывает IRQL для DISPATCH_LEVEL. Исходный IRQL восстанавливается при вызове соответствующего keRcuReadUnlock

Вызывающий поток закреплен на текущем процессоре для поддержания семантики RCU. Если процессор помечается как простой, функция корректирует счетчики состояния простоя соответствующим образом. Планировщик не позволяет преумноживание потока в критическом разделе.

Функция использует домен RCU по умолчанию, что подходит для простых вариантов использования RCU. Для более сложных сценариев, требующих пользовательских доменов синхронизации, используйте KeSrcuReadLock с явным разделом SRCU.

Требования

Требование Ценность
Минимальный поддерживаемый клиент Windows 11 версии 24H2
минимальный поддерживаемый сервер Windows Server 2025 г.
целевая платформа Всеобщий
Header wdm.h (include Wdm.h)
Library NtosKrnl.lib
IRQL Любой уровень (см. примечания)

См. также

KeRcuReadUnlock

KeRcuSynchronize

KeSrcuReadLock

KeSrcuReadUnlock

KeSrcuAllocate