Sdílet prostřednictvím


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.