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