Freigeben über


Verriegelte verknüpfte Listen

Eine miteinander verknüpfte Liste (SList) erleichtert das Einfügen und Löschen aus einer verknüpften Liste. SLists werden mithilfe eines Nichtblockingalgorithmus implementiert, um eine atomische Synchronisierung bereitzustellen, die Systemleistung zu erhöhen und Probleme wie Prioritätsinversion und Sperrkonvoys zu vermeiden.

SLists sind einfach zu implementieren und in 32-Bit-Code zu verwenden. Es ist jedoch schwierig, sie in 64-Bit-Code zu implementieren, da die Menge der austauschbaren Daten durch die systemeigenen interlockierten Austauschgrundtypen nicht doppelt so groß ist wie im 32-Bit-Code. Daher ermöglichen SLists das Portieren von skalierbaren High-End-Algorithmen zu Windows.

Windows 8: Ab Windows 8 stehen die entsprechenden systemeigenen interlockigen Austauschgrundtypen für 64-Bit-Code zur Verfügung, z. B. InterlockedCompare64Exchange128.

Anwendungen können SLists verwenden, indem sie die InitializeSListHead--Funktion aufrufen, um den Kopf der Liste zu initialisieren. Verwenden Sie zum Einfügen von Elementen in die Liste die InterlockedPushEntrySList Funktion. Verwenden Sie zum Löschen von Elementen aus der Liste die funktion InterlockedPopEntrySList.

Alle Listenelemente müssen an einer MEMORY_ALLOCATION_ALIGNMENT Grenze ausgerichtet werden. Nicht ausgerichtete Elemente können zu unvorhersehbaren Ergebnissen führen. Siehe _aligned_malloc.

Ein Beispiel finden Sie unter Verwenden von Singly Linked Lists.

In der folgenden Tabelle sind die SList-Funktionen aufgeführt.

Funktion Beschreibung
InitializeSListHead- Initialisiert den Kopf einer singly verknüpften Liste.
InterlockedFlushSList Löscht die gesamte Liste der Elemente in einer singly verknüpften Liste.
InterlockedPopEntrySList- Entfernt ein Element aus der Vorderseite einer singly verknüpften Liste.
InterlockedPushEntrySList- Fügt ein Element an der Vorderseite einer singly verknüpften Liste ein.
InterlockedPushListSListSList Fügt eine singly verknüpfte Liste an der Vorderseite einer anderen verknüpften Liste ein.
InterlockedPushListSListSListEx Fügt eine singly verknüpfte Liste an der Vorderseite einer anderen verknüpften Liste ein. Diese Version der Methode verwendet nicht die __fastcall Aufrufkonvention.
RtlFirstEntrySList- Ruft den ersten Eintrag in einer singly verknüpften Liste ab.
QueryDepthSList- Ruft die Anzahl der Einträge in der angegebenen verknüpften Liste ab.