Sammanflätade singly länkade listor
En sammanflätad länkad lista (SList) underlättar infogning och borttagning från en länkad lista. SLists implementeras med hjälp av en icke-blockeringsalgoritm för att tillhandahålla atomisk synkronisering, öka systemets prestanda och undvika problem som prioriterad inversion och låskonvojer.
SLists är enkla att implementera och använda i 32-bitars kod. Det är dock svårt att implementera dem i 64-bitars kod eftersom mängden data som kan utbytas av de interna sammankopplade exchange-primitiverna inte är dubbelt så stor som adressstorleken, som i 32-bitarskod. Därför möjliggör SLists portning av avancerade skalbara algoritmer till Windows.
Windows 8: Från och med Windows 8 är lämpliga interna sammankopplade exchange-primitiver tillgängliga för 64-bitarskod, till exempel InterlockedCompare64Exchange128.
Program kan använda SLists genom att anropa funktionen InitializeSListHead för att initiera listans huvud. Om du vill infoga objekt i listan använder du funktionen InterlockedPushEntrySList. Om du vill ta bort objekt från listan använder du funktionen InterlockedPopEntrySList.
Alla listobjekt måste vara justerade på en MEMORY_ALLOCATION_ALIGNMENT gräns. Ojusterade objekt kan orsaka oförutsägbara resultat. Se _aligned_malloc.
Ett exempel finns i Using Singly Linked Lists.
I följande tabell visas SList-funktionerna.
Funktion | Beskrivning |
---|---|
InitializeSListHead | Initierar huvudet för en singly länkad lista. |
InterlockedFlushSList | Rensar hela listan med objekt i en allsingly länkad lista. |
InterlockedPopEntrySList | Tar bort ett objekt från framsidan av en singly länkad lista. |
InterlockedPushEntrySList | Infogar ett objekt längst fram i en singly länkad lista. |
InterlockedPushListSList | Infogar en singly-länkad lista längst fram i en annan singly länkad lista. |
InterlockedPushListSListEx | Infogar en singly-länkad lista längst fram i en annan singly länkad lista. Den här versionen av metoden använder inte __fastcall-anropskonventionen. |
RtlFirstEntrySList | Hämtar den första posten i en singly länkad lista. |
QueryDepthSList | Hämtar antalet poster i den angivna singly länkade listan. |