Share via


Elenchi collegati interlocked

Un elenco collegato interlock ( SList) semplifica l'attività di inserimento ed eliminazione da un elenco collegato. Gli elenchi SList vengono implementati usando un algoritmo non sbloccante per fornire la sincronizzazione atomica, aumentare le prestazioni del sistema ed evitare problemi come l'inversione prioritaria e i convogli di blocco.

SLists è semplice 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 native non è doppia la dimensione dell'indirizzo, come nel codice a 32 bit. Pertanto, SLists abilita la conversione di algoritmi scalabili di alto livello a Windows.

Windows 8: a partire da Windows 8 le primitive di scambio interlocked appropriate sono disponibili per il codice a 64 bit, ad esempio InterlockedCompare64Exchange128.

Le applicazioni possono usare SLists chiamando la funzione InitializeSListHead per inizializzare l'head dell'elenco. Per inserire elementi nell'elenco, usare la funzione InterlockedPushEntrySList . Per eliminare gli elementi dall'elenco, usare la funzione InterlockedPopEntrySList .

Tutti gli elementi di elenco devono essere allineati a un limite MEMORY_ALLOCATION_ALIGNMENT . Gli elementi non idonei 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 la testa di un elenco collegato singly.
InterlockedFlushSList Scarica l'intero elenco di elementi in un elenco collegato singly.
InterlockedPopEntrySList Rimuove un elemento dalla parte anteriore di un elenco collegato singly.
InterlockedPushEntrySList Inserisce un elemento all'inizio di un elenco collegato singly.
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 in un elenco collegato singly.
QueryDepthSList Recupera il numero di voci nell'elenco collegato specificato.