Compartir vía


Listas vinculadas interbloqueadas

Un lista vinculada interbloqueada (SList) facilita la tarea de inserción y eliminación de una lista vinculada. Los SLists se implementan mediante un algoritmo de no bloqueo para proporcionar sincronización atómica, aumentar el rendimiento del sistema y evitar problemas como la inversión de prioridad y los convoyes de bloqueo.

Las listas de SList son sencillas de implementar y usar en código de 32 bits. Sin embargo, es difícil implementarlos en código de 64 bits porque la cantidad de datos intercambiables por las primitivas de intercambio interbloqueadas nativas no es doble el tamaño de dirección, ya que está en código de 32 bits. Por lo tanto, SLists habilita la portabilidad de algoritmos escalables de gama alta a Windows.

Windows 8: a partir de Windows 8, las primitivas de intercambio interbloqueadas adecuadas están disponibles para código de 64 bits, por ejemplo, InterlockedCompare64Exchange128.

Las aplicaciones pueden usar SLists llamando a la función InitializeSListHead para inicializar el encabezado de la lista. Para insertar elementos en la lista, use la función InterlockedPushEntrySList. Para eliminar elementos de la lista, use la funcióninterlockedPopEntrySList.

Todos los elementos de lista deben alinearse en un límite de MEMORY_ALLOCATION_ALIGNMENT. Los elementos no asignados pueden provocar resultados imprevisibles. Consulte _aligned_malloc.

Para obtener un ejemplo, vea Using Singly Linked Lists.

En la tabla siguiente se enumeran las funciones SList.

Función Descripción
initializeSListHead Inicializa el encabezado de una lista vinculada singly.
interlockedFlushSList Vacía toda la lista de elementos de una lista vinculada singly.
interlockedPopEntrySList Quita un elemento de la parte frontal de una lista vinculada de forma singly.
InterlockedPushEntrySList Inserta un elemento en la parte frontal de una lista vinculada de forma singly.
InterlockedPushListSList Inserta una lista vinculada de forma singly en la parte frontal de otra lista vinculada de forma singly.
interlockedPushListSListEx Inserta una lista vinculada de forma singly en la parte frontal de otra lista vinculada de forma singly. Esta versión del método no usa la convención de llamada de __fastcall.
rtlFirstEntrySList Recupera la primera entrada de una lista vinculada singly.
queryDepthSList Recupera el número de entradas de la lista vinculada de forma singly especificada.