Összekapcsolt, egymáshoz csatolt listák

Az összekapcsolt, egymáshoz csatolt listák (SList) megkönnyítik a csatolt listából való beszúrást és törlést. Az SList-ek blokkolásmentes algoritmussal implementálva biztosítják az atomi szinkronizálást, növelik a rendszer teljesítményét, és elkerülik az olyan problémákat, mint a prioritási inverzió és a konvojok zárolása.

Az SList-ek 32 bites kódban egyszerűen implementálódnak és használhatók. A 64 bites kódban azonban nehéz implementálni őket, mert a natív összekapcsolt exchange-primitívek által kicserélhető adatok mennyisége nem duplája a címméretnek, mint a 32 bites kódban. Ezért az SList-ek lehetővé teszik a csúcskategóriás skálázható algoritmusok Windowsba történő átvitelét.

Windows 8: Windows 8-tól kezdve a megfelelő natív, egymáshoz kapcsolt exchange-primitívek érhetők el a 64 bites kódhoz, például InterlockedCompare64Exchange128.

Az alkalmazások SList-eket használhatnak az InitializeSListHead függvény meghívásával a lista élének inicializálásához. Ha elemeket szeretne beszúrni a listába, használja az InterlockedPushEntrySList függvényt. A lista elemeinek törléséhez használja az InterlockedPopEntrySList függvényt.

Minden listaelemet egy MEMORY_ALLOCATION_ALIGNMENT határvonalhoz kell igazítani. A nem elaltatott elemek kiszámíthatatlan eredményeket okozhatnak. Lásd: _aligned_malloc.

Példa: A Singly Csatolt listák használata.

Az alábbi táblázat az SList függvényeket sorolja fel.

Funkció Leírás
InitializeSListHead Inicializálja a külön csatolt lista vezetőjét.
InterlockedFlushSList A teljes elemlistát kiüríti egy egymáshoz csatolt listában.
InterlockedPopEntrySList Eltávolít egy elemet egy önállóan csatolt lista elejéről.
InterlockedPushEntrySList Egy elemet szúr be egy önállóan csatolt lista elejére.
InterlockedPushListSList Egy önállóan csatolt listát szúr be egy másik, egymáshoz kapcsolódó lista elejére.
InterlockedPushListSListEx Egy önállóan csatolt listát szúr be egy másik, egymáshoz kapcsolódó lista elejére. A metódus ezen verziója nem használja a __fastcall hívási konvencióját.
RtlFirstEntrySList Lekéri az első bejegyzést egy egymáshoz csatolt listában.
QueryDepthSList Lekéri a megadott, egymáshoz csatolt listában szereplő bejegyzések számát.