Interlocked Singly Linked Lists
interlocked singly linked list (SList) usnadňuje úkol vložení a odstranění z propojeného seznamu. Seznamy SList se implementují pomocí neblokujícího algoritmu pro zajištění atomické synchronizace, zvýšení výkonu systému a zabránění problémům, jako je inverze priority a uzamčení konvojů.
Seznamy SList jsou jednoduché pro implementaci a použití v 32bitovém kódu. Je ale náročné je implementovat v 64bitovém kódu, protože množství dat vyměnitelných nativními meziblokovanými primitivy výměny není dvojitou velikost adresy, protože je v 32bitovém kódu. Proto SLists umožňují portování vysoce komplexních škálovatelných algoritmů do Windows.
Windows 8: Počínaje Windows 8 jsou pro 64bitový kód k dispozici příslušné nativní primitivy vzájemné výměny, například InterlockedCompare64Exchange128.
Aplikace mohou použít SLists voláním InitializeSListHead funkce inicializovat záhlaví seznamu. Pokud chcete do seznamu vložit položky, použijte funkci InterlockedPushEntrySList. Pokud chcete odstranit položky ze seznamu, použijte funkci InterlockedPopEntrySList.
Všechny položky seznamu musí být zarovnané na MEMORY_ALLOCATION_ALIGNMENT hranici. Nerovnané položky můžou způsobit nepředvídatelné výsledky. Viz _aligned_malloc.
Příklad najdete v tématu Použití ingly propojených seznamů.
Následující tabulka uvádí funkce SList.
Funkce | Popis |
---|---|
InitializeSListHead | Inicializuje hlavu singly propojeného seznamu. |
InterlockedFlushSList | Vyprázdní celý seznam položek v ingly propojeném seznamu. |
InterlockedPopEntrySList | Odebere položku z přední části ingly propojeného seznamu. |
InterlockedPushEntrySList | Vloží položku před ingly propojený seznam. |
InterlockedPushListSList | Vloží ingly propojený seznam na přední straně jiného ingly propojeného seznamu. |
InterlockedPushListSListEx | Vloží ingly propojený seznam na přední straně jiného ingly propojeného seznamu. Tato verze metody nepoužívá __fastcall konvenci volání. |
RtlFirstEntrySList | Načte první položku v ingly propojeném seznamu. |
queryDepthSList | Načte počet položek v zadaném ingly propojeném seznamu. |