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