Compartir a través de


Listas vinculadas entrelazados

Una lista vinculada interbloqueada (SList) facilita la tarea de inserción y eliminación de una lista vinculada. Los SList se implementan mediante un algoritmo de 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 se encuentra en código de 32 bits. Por lo tanto, SLists habilita la migración 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ón InterlockedPopEntrySList .

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, consulte Uso de listas vinculadas singly.

En la tabla siguiente se enumeran las funciones SList.

Función Descripción
InitializeSListHead Inicializa el encabezado de una lista vinculada de forma singly.
InterlockedFlushSList Vacía toda la lista de elementos de una lista vinculada de forma singly.
InterlockedPopEntrySList Quita un elemento de la parte delantera de una lista vinculada de forma singly.
InterlockedPushEntrySList Inserta un elemento en la parte delantera de una lista vinculada de forma singly.
InterlockedPushListSList Inserta una lista vinculada de forma singly en la parte delantera de otra lista vinculada de forma singly.
InterlockedPushListSListEx Inserta una lista vinculada de forma singly en la parte delantera 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 de forma singly.
QueryDepthSList Recupera el número de entradas de la lista vinculada de forma singly especificada.