Udostępnij za pośrednictwem


Połączone listy singly połączone

połączonej listy singly połączonej (SList) ułatwia zadanie wstawiania i usuwania z listy połączonej. Listy SList są implementowane przy użyciu algorytmu blokującego w celu zapewnienia synchronizacji niepodzielnej, zwiększenia wydajności systemu i uniknięcia problemów, takich jak priorytetowe konwoje inwersji i blokady.

Listy SList są proste do zaimplementowania i użycia w 32-bitowym kodzie. Jednak implementacja ich w 64-bitowym kodzie jest trudna, ponieważ ilość danych wymienianych przez natywnie połączone elementy pierwotne wymiany nie jest dwukrotnie większa niż rozmiar adresu, ponieważ jest to kod 32-bitowy. W związku z tym listy SList umożliwiają przenoszenie wysoce skalowalnych algorytmów do systemu Windows.

Windows 8: Począwszy od systemu Windows 8 odpowiednie natywnie powiązane elementy pierwotne wymiany są dostępne dla 64-bitowego kodu, na przykład InterlockedCompare64Exchange128.

Aplikacje mogą używać list SList, wywołując funkcję InitializeSListHead w celu zainicjowania nagłówka listy. Aby wstawić elementy do listy, użyj funkcji InterlockedPushEntrySList. Aby usunąć elementy z listy, użyj funkcji InterlockedPopEntrySList.

Wszystkie elementy listy muszą być wyrównane do granicy MEMORY_ALLOCATION_ALIGNMENT. Nieprzygotowane elementy mogą powodować nieprzewidywalne wyniki. Zobacz _aligned_malloc.

Aby zapoznać się z przykładem, zobacz Using Singly Linked Lists.

W poniższej tabeli wymieniono funkcje SList.

Funkcja Opis
initializeSListHead Inicjuje głowę singly połączonej listy.
InterlockedFlushSList Opróżnia całą listę elementów na połączonej liście.
interlockedPopEntrySList Usuwa element z przodu połączonej listy.
InterlockedPushEntrySList Wstawia element na początku połączonej listy.
InterlockedPushListSList Wstawia singly-linked list na początku innej singly połączonej listy.
InterlockedPushListSListEx Wstawia singly-linked list na początku innej singly połączonej listy. Ta wersja metody nie używa __fastcall konwencji wywoływania.
RtlFirstEntrySList Pobiera pierwszy wpis na liście połączonej singly.
QueryDepthSList Pobiera liczbę wpisów na określonej liście połączonej singly.