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. |