Listes liées de manière imbriquée
Une liste liée verrouillée (SList) facilite la tâche d’insertion et de suppression d’une liste liée. Les listes SList sont implémentées à l’aide d’un algorithme non bloquant pour fournir une synchronisation atomique, augmenter les performances du système et éviter des problèmes tels que l’inversion de priorité et les convois de verrouillage.
Les listes SList sont simples à implémenter et à utiliser dans du code 32 bits. Toutefois, il est difficile de les implémenter dans du code 64 bits, car la quantité de données échangeables par les primitives d’échange verrouillées natives n’est pas le double de la taille de l’adresse, comme c’est le cas dans le code 32 bits. Par conséquent, les listes SList permettent de porter des algorithmes évolutifs haut de gamme vers Windows.
Windows 8 : à partir de Windows 8 les primitives d’échange verrouillées natives appropriées sont disponibles pour le code 64 bits, par exemple InterlockedCompare64Exchange128.
Les applications peuvent utiliser des listes SLists en appelant la fonction InitializeSListHead pour initialiser le chef de la liste. Pour insérer des éléments dans la liste, utilisez la fonction InterlockedPushEntrySList . Pour supprimer des éléments de la liste, utilisez la fonction InterlockedPopEntrySList .
Tous les éléments de liste doivent être alignés sur une limite MEMORY_ALLOCATION_ALIGNMENT . Les éléments non alignés peuvent entraîner des résultats imprévisibles. Voir _aligned_malloc.
Pour obtenir un exemple, consultez Utilisation de listes liées séparément.
Le tableau suivant répertorie les fonctions SList.
Fonction | Description |
---|---|
InitializesListHead | Initialise la tête d’une liste liée séparément. |
InterlockedFlushSList | Vide la liste entière des éléments d’une liste liée unique. |
InterlockedPopEntrySList | Supprime un élément de l’avant d’une liste liée unique. |
InterlockedPushEntrySList | Insère un élément à l’avant d’une liste liée unique. |
InterlockedPushListSList | Insère une liste liée séparément à l’avant d’une autre liste liée séparément. |
InterlockedPushListSListEx | Insère une liste liée séparément à l’avant d’une autre liste liée séparément. Cette version de la méthode n’utilise pas la convention d’appel __fastcall . |
RtlFirstEntrySList | Récupère la première entrée d’une liste liée séparément. |
QueryDepthSList | Récupère le nombre d’entrées dans la liste liée unique spécifiée. |