Miteinander verknüpfte, einzeln verknüpfte Listen
Eine Interlocked einzeln verknüpfte Liste (SLIST) vereinfacht die Aufgabe zum Einfügen und löschen aus einer verknüpften Liste. Slists werden mithilfe eines nicht blockierenden Algorithmus implementiert, um eine atomarische Synchronisierung bereitzustellen, die Systemleistung zu erhöhen und Probleme wie Prioritäts-und Sperr Konvois zu vermeiden.
Slists sind einfach zu implementieren und in 32-Bit-Code zu verwenden. Es ist jedoch eine Herausforderung, Sie in 64-Bit-Code zu implementieren, da die Menge der Daten, die durch die systemeigenen, austauschbaren Austausch primitiven ausgetauscht werden, nicht doppelt so groß wie die Adressgröße ist, da Sie in 32-Bit-Code vorliegt. Slists ermöglichen daher das Portieren von skalierbaren High-End-Algorithmen auf Windows.
Windows 8: Ab Windows 8 sind die entsprechenden systemeigenen, systeminternen Austausch primitiven für 64-Bit-Code verfügbar, z. b. InterlockedCompare64Exchange128.
Anwendungen können slists verwenden, indem Sie die initializeslisorad -Funktion aufrufen, um den Anfang der Liste zu initialisieren. Um Elemente in die Liste einzufügen, verwenden Sie die Funktion interlockedpushentryslist . Um Elemente aus der Liste zu löschen, verwenden Sie die Funktion interlockedpopentryslist .
Alle Listenelemente müssen an der _ _ Ausrichtungs Grenze der Speicher Belegung ausgerichtet werden. Nicht ausgerichtete Elemente können zu unvorhersehbaren Ergebnissen führen. Siehe _ ausgerichtete _ malloc.
Ein Beispiel finden Sie unter Verwenden von einzeln verknüpften Listen.
In der folgenden Tabelle sind die slist-Funktionen aufgeführt.
| Funktion | BESCHREIBUNG |
|---|---|
| Initializeslisder AD | Initialisiert den Anfang einer einzeln verknüpften Liste. |
| Interlockedflushslist | Leert die gesamte Liste der Elemente in einer einzeln verknüpften Liste. |
| Interlockedpopentryslist | Entfernt ein Element von der Vorderseite einer einzeln verknüpften Liste. |
| Interlockedpushentryslist | Fügt ein Element am Anfang einer einzeln verknüpften Liste ein. |
| Interlockedpushlistslist | Fügt eine einzeln verknüpfte Liste an der Vorderseite einer anderen verknüpften Liste ein. |
| Interlockedpushlistslistex | Fügt eine einzeln verknüpfte Liste an der Vorderseite einer anderen verknüpften Liste ein. Diese Version der-Methode verwendet nicht die _ _ fastcall -Aufruf Konvention. |
| Rtlfirstentryslist | Ruft den ersten Eintrag in einer einzeln verknüpften Liste ab. |
| Querydepthslist | Ruft die Anzahl der Einträge in der angegebenen einzeln verknüpften Liste ab. |