Freigeben über


KeSrcuReadLock-Funktion (wdm.h)

Die KeSrcuReadLock-Routine wechselt in den schreibseitigen RCU-kritischen Abschnitt einer angegebenen Sleepable Read-Copy-Update (SRCU)-Partition.

Syntax

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

Die Parameter

[in] Rcu

Ein Zeiger auf die SRCU-Instanz, die zuvor von KeSrcuAllocate zugewiesen wurde.

[out] Lock

Ein Zeiger auf eine KE_SRCU_LOCK Struktur, die den Sperrkontext empfängt. Dieser Kontext muss beim Beenden des kritischen Abschnitts an KeSrcuReadUnlock übergeben werden.

Rückgabewert

Nichts

Bemerkungen

KeSrcuReadLock wechselt in einen schreibseitigen kritischen Abschnitt, sodass der Aufrufer sicher auf Daten zugreifen kann, die durch die SRCU-Partition geschützt sind. Mehrere Leser können Lesesperren gleichzeitig halten, aber Updates müssen warten, bis alle Leser beendet werden.

Im Gegensatz zu regulären RCU können Leser beim Halten der Lesesperre schlafen. Lesesperren können innerhalb desselben Threads geschachtelt werden. Der Thread kann zu verschiedenen Prozessoren migriert werden, während er die Sperre hält.

Koppeln Sie immer mit KeSrcuReadUnlock im selben Thread. Der Lock-Parameter empfängt den Kontext, der für die Entsperrung erforderlich ist. Mehrere Leser können gleichzeitig auf die geschützten Daten zugreifen. Autoren müssen KeSrcuSynchronize verwenden, um auf den Abschluss des Lesers zu warten.

Wenn der Thread zu einem anderen Prozessor zwischen Sperr und Entsperrung migriert wird, verwendet der Entsperrvorgang einen Interprozessor-Interrupt (IPI), um die Entsperrung auf dem ursprünglichen Prozessor abzuschließen.

Anforderungen

Anforderung Wert
Zielplattform Universal
Header wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Beliebige Ebene

Siehe auch

KE_SRCU_LOCK

KeSrcuAllocate

KeSrcuFree

KeSrcuReadUnlock

KeSrcuSynchronize