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


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

Подпрограмма KeSrcuReadLock входит в критически важный раздел RCU на стороне чтения указанной секции с спящегоCopy-Update (SRCU).

Синтаксис

VOID KeSrcuReadLock(
  [in]  PKE_SRCU      Rcu,
  [out] PKE_SRCU_LOCK Lock
);

Параметры

[in] Rcu

Указатель на экземпляр SRCU, который ранее был выделен KeSrcuAllocate.

[out] Lock

Указатель на структуру KE_SRCU_LOCK , которая получает контекст блокировки. Этот контекст необходимо передать в KeSrcuReadUnlock при выходе из критического раздела.

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

None

Замечания

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

В отличие от обычного RCU, читатели могут спать во время хранения блокировки чтения. Блокировки чтения можно вложить в один поток. Поток может перенестися на разные процессоры при удержании блокировки.

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

Если поток переносится на другой процессор между блокировкой и разблокировкой, операция разблокировки будет использовать межпроцессорное прерывание (IPI) для завершения разблокировки на исходном процессоре.

Требования

Требование Ценность
целевая платформа Всеобщий
Header wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Любой уровень

См. также

KE_SRCU_LOCK

KeSrcuAllocate

KeSrcuFree

KeSrcuReadUnlock

KeSrcuSynchronize