Partager via


Listes liées singly verrouillées

Une liste liée imbriquée (SList) facilite la tâche d’insertion et de suppression d’une liste liée. Les SLists sont implémentés à 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 prioritaire et les convois de verrouillage.

Les listes de sécurité 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 pouvant être échangées par les primitives d’échange interblocées natives n’est pas double de la taille d’adresse, car elle se trouve dans du code 32 bits. Par conséquent, les SLists permettent de porter des algorithmes évolutifs haut de gamme vers Windows.

Windows 8 : à partir de Windows 8 les primitives d’échange interblocées natives appropriées sont disponibles pour le code 64 bits, par exemple InterlockedCompare64Exchange128.

Les applications peuvent utiliser SLists en appelant la fonction InitializeSListHead pour initialiser la tête 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 de 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 singly.

Le tableau suivant répertorie les fonctions SList.

Fonction Description
InitializeSListHead Initialise la tête d’une liste liée singly.
InterlockedFlushSList Vide toute la liste des éléments d’une liste liée de manière singly.
InterlockedPopEntrySList Supprime un élément à partir de l’avant d’une liste liée de manière singly.
InterlockedPushEntrySList Insère un élément à l’avant d’une liste liée singly.
InterlockedPushListSListSList Insère une liste liée en singly à l’avant d’une autre liste liée singly.
InterlockedPushListSListEx Insère une liste liée en singly à l’avant d’une autre liste liée singly. 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 singly.
QueryDepthSList Récupère le nombre d’entrées dans la liste liée singly spécifiée.