Elenchi collegati interlocked
Un elenco collegato interlocked (SList) semplifica l'attività di inserimento ed eliminazione da un elenco collegato. Gli SList vengono implementati usando un algoritmo non bloccante per fornire la sincronizzazione atomica, aumentare le prestazioni del sistema ed evitare problemi come l'inversione prioritaria e i convogli di blocco.
Gli elenchi SList sono semplici da implementare e usare nel codice a 32 bit. Tuttavia, è difficile implementarli nel codice a 64 bit perché la quantità di dati scambiabili dalle primitive di scambio interlocked nativo non è doppia la dimensione dell'indirizzo, come nel codice a 32 bit. Pertanto, SLists abilita la conversione di algoritmi scalabili di fascia alta in Windows.
Windows 8: A partire da Windows 8 sono disponibili le primitive di scambio interlocked native appropriate per il codice a 64 bit, ad esempio InterlockedCompare64Exchange128.
Le applicazioni possono usare SLists chiamando la funzioneinitializeSListHeadper inizializzare l'intestazione dell'elenco. Per inserire elementi nell'elenco, usare la funzione di InterlockedPushEntrySList. Per eliminare elementi dall'elenco, usare la funzione diinterlockedPopEntrySList.
Tutti gli elementi dell'elenco devono essere allineati su un limite MEMORY_ALLOCATION_ALIGNMENT. Gli elementi non allineati possono causare risultati imprevedibili. Vedere _aligned_malloc.
Per un esempio, vedere Uso di elenchi collegati singly.
Nella tabella seguente sono elencate le funzioni SList.
Funzione | Descrizione |
---|---|
InitializeSListHead | Inizializza l'intestazione di un elenco collegato cantamente. |
InterlockedFlushSList | Scarica l'intero elenco di elementi in un elenco collegato cantamente. |
InterlockedPopEntrySList | Rimuove un elemento dalla parte anteriore di un elenco collegato cantamente. |
InterlockedPushEntrySList | Inserisce un elemento nella parte anteriore di un elenco collegato cantamente. |
InterlockedPushListSList | Inserisce un elenco collegato singly all'inizio di un altro elenco collegato. |
InterlockedPushListSListEx | Inserisce un elenco collegato singly all'inizio di un altro elenco collegato. Questa versione del metodo non usa la convenzione di chiamata __fastcall. |
RtlFirstEntrySList | Recupera la prima voce di un elenco collegato singly. |
QueryDepthSList | Recupera il numero di voci nell'elenco collegato specificato. |