Directorio para informática y programación multinúcleo
Parte 1 Conocimientos básicos
1 Descripción general de la informática multinúcleo
1.1 Descripción general de la CPU multinúcleo
1.1.1 Multi La informática de múltiples núcleos se convertirá en una tendencia de desarrollo
1.1.2 Introducción a la arquitectura de hardware de CPU de múltiples núcleos
1.1.3 Oportunidades y desafíos que los múltiples núcleos brindan a los programadores
1.2 ¿Qué problemas encontrará la programación multinúcleo?
1.2.1 Problema de concurrencia
1.2.2 Problema de inanición de CPU
1.2.3 Descomposición de tareas y problema de programación
1.2.4 Problemas de rendimiento del índice de aceleración
1.2.5 Problemas de conservación de energía y protección del medio ambiente
1.2.6 Problemas de escalabilidad
1.3 La diferencia entre programación de múltiples núcleos y programación de múltiples subprocesos de un solo núcleo
1.3.1 La diferencia entre la serialización causada por la competencia de bloqueo
1.3.2 La diferencia entre la descomposición de subprocesos y ejecución
1.3.3 La diferencia entre el equilibrio de carga del núcleo de la CPU
1.3.4 Diferencias en las estrategias de programación de tareas
1.3.5 Diferencias en el acceso a CPUCache (pseudo * problema de compartir)
1.3.6 Prioridad de prioridad de tarea La diferencia
1.3.7 La diferencia entre computación en serie y computación paralela y distribuida
1.4 La diferencia entre programación multinúcleo y programación distribuida multimáquina
1.4 *** La diferencia entre almacenamiento compartido y almacenamiento distribuido
1.4.2 La diferencia entre informática distribuida
1.4.3 La diferencia en el entorno de programación
1.5 Coeficiente de relación de aceleración
1.5.1 Ley de Amdahl
1.5.2 Ley de Gustavson
1.5.3 Equivalencia de la ley de Amdahl y la ley de Gustafson
1.5.4Métrica de Karp-Flatt
1.5.5 Factores que afectan el coeficiente de aceleración en situaciones reales
1.5.6 Relación de aceleración en el caso de sobrecarga de computación paralela
1.6 Problemas de competencia de bloqueo y su impacto en la relación de aceleración
1.6.1 Factor de granularidad de subprocesos y factor de granularidad de bloqueo
1.6.2 Rendimiento de la competencia de bloqueos
p>
1.6.3 Análisis de aceleración en la competencia de bloqueos centralizados
1.6.4 Análisis de aceleración en la competencia de bloqueos aleatorios
1.6.5 Competencia de bloqueo distribuido Análisis de aceleración
1.6.6 Análisis de aceleración de la programación sin bloqueo
1.7 Impacto de los problemas de equilibrio de carga en la velocidad
1.7.1 Impacto en el equilibrio de carga Factores principales
1.7.2 Indicadores de evaluación del equilibrio de carga
1.7.3 Relación de aceleración bajo equilibrio de carga
1.8 Referencias
2 Conceptos básicos de la programación multiproceso
2.1 Conceptos básicos de la programación multiproceso
2.1.1 Hilos
2.1.2 Bloqueos
2.1.3 Operaciones de bloqueo y funciones de operación de semáforo comúnmente utilizadas en varios sistemas
2.1.4 Utilice C para realizar la liberación automática de bloqueos
2.1.5 Atómico operaciones
2.1.6 La diferencia entre bloqueos y operaciones atómicas
2.1.7 Los conceptos de computación con bloqueos, computación sin bloqueos y computación local
2.2 Rendimiento comparación de varias cerraduras
2.2.1 Rendimiento de varias cerraduras en situaciones de un solo subproceso
2.2.2 Rendimiento de varias cerraduras en situaciones de competencia de cerraduras centralizadas de múltiples subprocesos
2.2.3 Varios Rendimiento de los bloqueos en la competencia de bloqueos distribuidos de subprocesos múltiples
2.3 Algoritmo de bloqueo de lectura-escritura
2.3.1 Introducción al concepto de bloqueo de lectura-escritura p>
2.3.2 Análisis e implementación del algoritmo de bloqueo de lectura-escritura
2.3.3 Implementación de codificación del bloqueo de lectura-escritura
2.4 Algoritmo de salida multiproceso
2.4.1 Algoritmo de salida de subproceso único
2
.4.2 Salir cuando varios subprocesos acceden a recursos compartidos
2.4.3 Implementación de algoritmo de liberación y salida de recursos multiproceso con bloqueo
2.4.4 Algoritmo de salida sin bloqueo
2.4.5 Uso del algoritmo de salida multiproceso
2.5 Referencias
3Programación OpenMP
3.1Conceptos básicos de OpenMP
3.1.1 El concepto de modo de ejecución paralela fork/join
3.1.2 Modelo de memoria
3.1.3 Ejemplo de rendimiento
3.1.4 Compatibilidad con OpenMP del par de compiladores
3.2Modelo de programación OpenMP
3.2.1Formato de instrucción de instrucción de compilación OpenMP
3.2.2Comandos principales de OpenMP
3.2.3Cláusulas principales de OpenMP
3.2.4Funciones de la biblioteca principal de OpenMP
3.3 Creación de subprocesos y trabajo compartido
3.3.1comando paralelo
3.3.2comando for y paralelofor
3.3.3Cláusula if (paralelismo de ejecución condicional)
3.3.4 Establecer dinámicamente el número de subprocesos para bucles paralelos
3.3.5 Preguntas sobre paralelización de bucles
3.3.6 secciones y comandos de sección
3.3.7 comando único
3.3.8 comando maestro
3.4 Procesamiento de datos
3.4.1 cláusula privada
3.4.2 primera cláusula privada
3.4.3 última cláusula privada
3.4.4 cláusula privada de hilo
3.4.5 cláusula compartida
3.4.6 cláusula por defecto
3.4.7 cláusula de reducción
3.4.8 cláusula de copia
3.4.9 cláusula de copia privada
3.5 Programación de tareas
3.5.1 Uso de la cláusula de programación
3.5.2 Programación estática (estática)
3.5.3 Programación dinámica (dinámica)
3.5.4 Programación guiada (guiada)
3.5.5 Programación en tiempo de ejecución (rumtime)
3.5.6 Programación de tareas y pseudo ***problemas de uso compartido
3.6 Sincronización entre hilos
3.6.1comando de barrera
3.6.2comando crítico
3.6.3comando atómico
3.6.4comando ordenado y cláusula
3.6.5cláusula nowait
3.6.6comando de descarga
3.7Explicación detallada de la función de biblioteca OpenMP
p>
3.7. 1 Función de entorno de ejecución
3.7.2 Función de operación de bloqueo
3.7.3 Función de operación de tiempo
3.8Variable de entorno OpenMP
p>
3.8.1OMP_DYNAMIC
3.8.2OMP_NUM_THREADS
3.8.3OMP_NESTED
3.8.4OMP_SCHEDULE
3.9Variables de control interno de OpenMP y relacionados procesos
3.9.1 Variables de control interno
3.9.2 Proceso de programación de tareas
3.9.3 Proceso de decisión del número de subprocesos
3.10 Referencias
Parte 2 Algoritmos y estructuras de datos básicos
4 Números
Grupo
4.1 Pila
4.1.1 Concepto básico de pila
4.1.2 Implementación de codificación de pila
4.1.3 Multi- Threading Implementación de pila
4.2 Clasificación rápida de matrices
4.2.1 Introducción al algoritmo de clasificación
4.2.2 Idea básica de clasificación rápida en serie p>
4.2.3 Implementación de código de clasificación rápida en serie
4.2.4 Algoritmo de clasificación rápida no recursivo
4.2.5 Análisis de complejidad del algoritmo de clasificación rápida
4.3 Buscar en matriz
4.3.1 Búsqueda secuencial
4.3.2 Búsqueda binaria
4.4 Ejemplo: Usar matriz para gestionar una función HOOK p >
4.4.1 Implementación HOOK de una sola función
4.4.2 Implementación HOOK de múltiples funciones
4.4.3 Introducción a la aplicación de la función HOOK
4.4 .4 Precauciones al usar HOOK
4.5 Referencias
5 Lista enlazada
5.1 Lista enlazada unidireccional
5.1 .1 Representación de almacenamiento
p>5.1.2 Diseño de interfaz
5.1.3 Agregar nodo al encabezado de la lista vinculada
5.1.4 Codificación de funciones básicas implementación
5.2 Clasificación unidireccional de listas enlazadas
5.2.1 Ordenación por inserción
5.2.2 Ordenación por inserción fusionada
5.3 Doblemente listas enlazadas
5.3.1 Listas doblemente enlazadas Conceptos básicos
5.3.2 Diseño de listas doblemente enlazadas
5.3.3 Interfaz de operación de listas doblemente enlazadas p>
5.3.4 Implementación de codificación de listas doblemente enlazadas
5.4 Recorrido nodo por nodo de listas enlazadas
5.4.1 Conceptos básicos de recorrido nodo por nodo
5.4.2 Implementación de codificación transversal nodo por nodo
5.5 Algoritmo transversal de subprocesos múltiples
5.5.1 Implementación de diseño y codificación de listas enlazadas multiproceso
5.5.2 4 esquemas de recorrido de listas enlazadas de subprocesos múltiples
5.5.3 Múltiples La situación cuando los subprocesos atraviesan al mismo tiempo
5.6 Ejemplo: uso de enlaces listas para gestionar la caché de sistemas de mensajes cortos
5.6.1 Conceptos básicos de gestión de caché de sistemas de mensajes cortos
5.6.2 Análisis de envío y recepción de sistemas de mensajes cortos
5.6.3 Implementación de codificación de la gestión de caché del sistema de mensajes cortos
6 Tabla Hash
6.1 Tabla Hash
6.1.1 Conceptos básicos de hash tablas
6.1.2 Métodos de indexación de tablas hash
6.1.3 Métodos de resolución de conflictos de tablas hash
p>
6.1.4 Código fuente de operaciones básicas de la tabla hash
6.2 Lista enlazada hash
6.2.1 Comparación de eficiencia entre tabla hash, matriz y lista enlazada
6.2.2 La relación entre el tiempo eficiencia y eficiencia del espacio
6.2.3 Conceptos básicos de listas enlazadas hash
6.2.4 Operaciones de listas enlazadas hash
6.2.5 Implementación de codificación de listas enlazadas hash list
6.3 Ejemplo: Gestión dinámica de archivos CACHE de WebServer
6.3.1 Conceptos básicos de la gestión dinámica de archivos CACHE de WebServer
6.3.2 Diseño de archivos CACHE función de gestión
6.3.3 Implementación de codificación de la función de gestión de archivos CACHE
6.4 Referencias
7 Árboles ordinarios y árboles binarios
7.1 Ordinario árboles
7.1.1 Método de descripción de árboles ordinarios
7.1.2 Diseño de interfaz de operación de árbol
7.1.3 Algoritmo de recorrido de árbol
7.1.4 Implementación de codificación de árbol
7.1.5 Utilice el algoritmo transversal de árbol para implementar la función Xcopy
7
.2 Árbol binario
7.2.1 Conceptos básicos del árbol binario
7.2.2 La copa del árbol binario y la altura del árbol binario
7.2.3 El método de descripción del árbol binario
7.3 Árbol de clasificación binaria
7.3.1 Conceptos básicos del árbol de clasificación binaria
7.3.2 Búsqueda en binario árbol de clasificación
7.3.3 Inserción de árbol de clasificación binario
7.3.4 Eliminación de árbol de clasificación binario
7.3.5 Recorrido del árbol de clasificación binario
7.3 .6 Operación de rotación del árbol de clasificación binaria
8Árbol de búsqueda AVL
8.1Conceptos básicos del árbol de búsqueda AVL
8.2Inserción del árbol de búsqueda AVL
8.2.1 Cuestiones que deben considerarse en la operación de inserción
8.2.2 Análisis de la situación donde no hay nodos desequilibrados
8.2.3 Análisis de la situación del nodo A desequilibrado
8.2.4 Análisis de cuatro situaciones en las que existen nodos desequilibrados
8.2.5 Ajuste de la situación de desequilibrio del tipo LL
8.2 .6 Ajuste de la situación de desequilibrio del tipo LR
p>8.2.7 Descripción en pseudocódigo de la operación de inserción
8.3 Eliminación del árbol de búsqueda AVL
8.3.1 Determinación de Un nodo
8.3.2 Análisis de varias situaciones de desequilibrio
8.3.3 Análisis de ajuste de tipo L0
8.3.4 Análisis de ajuste de tipo L-1
8.3.5Análisis de ajuste de tipo L1
p>8.3.6 Descripción en pseudocódigo de la operación de eliminación
8.4 Árbol AVL con equilibrio de carga
8.4.1 Introducción de conceptos básicos
8.4.2 Ajuste del factor de carga en operación de inserción
8.4.3 Ajuste del factor de carga en operación de eliminación
8.4.4 L0 y L- 1 análisis de ajuste de tipo
8.4 Análisis de ajuste de tipo .5L1
Código fuente del árbol 8.5AVL
8.5.1 Definición de estructura de datos
8.5.2 Crear, liberar, buscar y otras operaciones
p>
8.5.3 Función de operación de rotación
8.5.4 Función de operación de inserción
8.5 .5 Función de operación de eliminación
8.6 Referencias
9 Árbol binario compuesto
9.1 Árbol hash rojo-negro
9.1.1 Concepto básico de Hash Red-Black Tree
9.1.1 Hash Búsqueda de árboles rojo-negro
9.1.3 Inserción de hash árboles rojo-negro
9.1.4 Eliminación de árboles hash rojo-negro
9.1.5 Ha Liberación de árbol hash rojo-negro
9.1.6 Recorrido del árbol hash rojo-negro
9.1 .7 Implementación de codificación del árbol hash rojo-negro
9.1.8 Análisis de eficiencia del árbol Hash Red-Black
9.2 Árbol Hash AVL
9.2.1 Básico Concepto de árbol Hash AVL
9.2.2 Hash buscando en el árbol AVL
9.2.3 Insertando el árbol hash AVL
9.2.4 Eliminando el árbol hash AVL
9.2.5 Lanzamiento del árbol Hash AVL
9.2.6 Recorrido del árbol hash AVL
9.2.7 Implementación de codificación del árbol hash AVL
9.3 Clasificación de estructuras de datos compuestos
p>
9.4 Ejemplos de ataques anti-DoS/DdoS
9.4.1 Concepto de ataques DoS/DdoS
9.4.2 Métodos comunes de ataques DoS/DdoS y estrategias de prevención
9.4.3 Implementación de ataques anti-DoS/DdoS
9.4.4 Implementación de codificación de anti-DoS/DdoS ataques
9.5 Referencias
Nº 3 Partes de la Computación Paralela
10 Patrones de Programación Paralela
10.1 Conceptos Básicos
>
10.1.1 Computación paralela fuerte y computación paralela débil
10.1.2 Ideas básicas de patrones de programación paralela
10.2 Patrón de descomposición de datos
10.3 Modo divide y vencerás
10.3.1 Problemas de equilibrio de carga al resolver subproblemas
10.3.2 Problemas de serialización que pueden deberse a la combinación de soluciones a subproblemas
10.4 Modo canalización
10.5 Modo paralelo de tareas
10.6 Modo de programación de tareas
10.6.1 Modo de programación de gráficos de tareas
10.6. 2 Modo de programación dinámica de tareas
11 Búsqueda paralela
11.1 Búsqueda secuencial paralela
11.1.1 Búsqueda paralela de datos específicos
11.1. 2 Número máximo de búsquedas paralelas
11.1.3 Algoritmo de detección de terminación
11.2 Búsqueda de ruta más corta de Dijkstra en serie
11.2.1 Descripción del algoritmo de ruta más corta de Dijkstra p>
11.2.2 Diagrama de proceso del algoritmo de ruta más corta de Dijkstra
11.2.3 Descripción del pseudocódigo
11.2.4 Diagrama de flujo del algoritmo
11.2.5C /Implementación de código C
11.3 Algoritmo de ruta más corta en paralelo
11.3.1 Paralelización del algoritmo de Dijkstra
11.3.2 Implementación de código del algoritmo de Dijkstra en paralelo
11.3.3 Introducción y análisis de otros algoritmos paralelos de ruta más corta
11.4 Referencias
12 Clasificación en paralelo
12.1 Descripción general de la clasificación en paralelo
12.2 Ordenación por burbujas
12.2.1 Ordenación por burbujas en serie
12.2.2 Ordenación por paridad
12.3 Ordenación rápida
12.3 . 1 Idea básica de clasificación rápida en serie
12.3.2 Implementación de código de clasificación rápida en serie
12.3.3 Método de paralelización de clasificación rápida
12.3.4 Ordenación rápida en paralelo en el proyecto de código abierto mcstl
12.3.5 Ordenación rápida basada en el robo de tareas
12.4 Ordenación por combinación en paralelo
12.4.1 Algoritmo de combinación en serie
12.4.2 Algoritmo de fusión paralela de Cole
12.4.3 Ordenación de fusión rápida paralela
12.5 Ordenación por base
12.5.1 Base de cadena en serie ordenar
12.5.2 Ordenar por base de matriz en serie
12.5.3 Ordenar jerárquico en un solo paso
12.5.4 Ordenar por base paralela con equilibrio de carga
12.5.5 Clasificación de particiones por bases paralelas
13 Cálculos numéricos paralelos
13.1 Problemas que enfrentan los cálculos numéricos paralelos de múltiples núcleos
13.1.1 Caché El Problema de tasa de aciertos
13.1.2 Problema de intercambio de pseudo***
13.2 Suma y suma de prefijos
13.3 Suma de matrices
13.4 Matriz multiplicación
13.4.1 Conceptos básicos
13.4.2 Algoritmo serial
13.4.3 Algoritmo paralelo
13.5 Multiplicación matriz-vector
13.6 Generación paralela de números aleatorios
13.7 Referencias
Parte 4 ***Computación distribuida de recursos compartidos
14 Patrones de diseño de computación distribuida p>
14.1 Conceptos básicos
14.1.1*** Descomposición computacional de recursos compartidos
14.1.2*** Compartir problemas de equilibrio de carga en la informática de recursos
14.1.3*** Ideas y métodos de diseño de algoritmos para la computación de recursos compartidos
14.2 Modo de competencia de agrupación de subprocesos<
/p>
14.2.1 Modo de competencia de agrupación de hilos estándar
14.2.2 Variaciones del modo de competencia de agrupación de hilos
14.3 Modo de competencia aleatoria de hilos
14.3 .1 Conceptos básicos
14.3.2 Garantía de rendimiento de la relación de aceleración
14.4 Modo de localización de datos
14.4.1 Lograr un rendimiento mejor que el de subprocesos múltiples de un solo núcleo
14.4.2 Modo de localización de datos
14.4.3 Análisis de ventajas y desventajas
14.5 Diseño de estructura de datos distribuidos
14.5 .1 Método de diseño de estructura de datos compuesta
14.5.2 Diseño de estructura de datos distribuidos
14.5.3 Principales cuestiones de la estructura de datos distribuidos
14.6 Referencias
p>
15 Cola distribuida
15.1 Cola serie
15.1.1 Cola de anillo simple
15.1.2 Deque en STL
15.1.3 Cola de timbre dinámico
15.2 Grupo de colas
15.2.1*** Cola compartida
15.2.2 Cola de mensajes
15.2.3 Grupo de colas
15.2.4 Varios esquemas de implementación del grupo de colas
15.2.5 Ejemplos de uso del grupo de colas
15.3 Con informática local distribuida cola
15.3.1 Idea básica
15.3.2 Implementación de cola localizada
15.3.3 Implementación de cola de robo de tareas
p >
15.3.4 Implementación de cola distribuida
15.3.5 Implementación del grupo de subprocesos CThreadPool
15.3.6 Implementación de código del grupo de subprocesos CThreadPool
15.3 .7Código fuente de CDistributedQueue
15.3.8Ejemplos de uso de CDistributedQueue
16 Búsqueda distribuida
16.1 Problemas e ideas principales de la búsqueda en multinúcleo
16.2 Diseño de estructura de búsqueda secundaria para equilibrio de carga estática
16.2.1 Diseño de estructura de búsqueda secundaria
16.2.2 Árbol AVL hash distribuido
16.2.3 Distribuido árbol AVL secuencial
16.3 Diseño de estructura de búsqueda multinivel para equilibrio de carga dinámico
16.3.1 Problemas de equilibrio de carga en la búsqueda distribuida
16.3.2 Multinivel Método de diseño de estructura de búsqueda
16.3.3 Algoritmo de búsqueda de tabla de búsqueda multinivel
16.3.4 Algoritmo de operación de inserción de tabla de búsqueda multinivel
16.3.5 Eliminar algoritmo de operación de la tabla de búsqueda multinivel
16.3.6 Tabla de secuencia multinivel
16.3.7 Árbol AVL de índice multinivel
16.3 .8 Distribuido árbol AVL multinivel hash
16.3.9 Árbol AVL secuencial distribuido multinivel
16.4 Método de selección del algoritmo de búsqueda en un entorno multinúcleo
16.5 Dinámico Ejemplo de diseño de WebCache
17 Gestión de memoria distribuida
17.1 Ideas básicas de gestión de memoria multinúcleo
17.1.1 Requisitos de gestión de memoria
17.1.2 Ideas de gestión de memoria en sistemas multinúcleo
17.2 Gestión de memoria de igual tamaño
17.2.1 Conceptos básicos de gestión de memoria Freelist
17.2.2 Implementación de codificación de listas libres
17.2.3 Gestión de memoria de FreeLists
17.3 Gestión de memoria en el proyecto de código abierto Intel TBB
17.3.1 Problema de intercambio de pseudo****** p>
17.3.2 Gestión de memoria alineada con caché
>17.3.3 Estructuras de datos
17.3.4 Asignación de administradores de memoria a subprocesos
17.3.5 Algoritmos de asignación y liberación
17.3.6 Cuando un subproceso sale de la memoria reciclaje
17.4 Algoritmo de gestión de memoria preventiva
17.4.1 Idea básica del algoritmo
17.4.2 Tecnología de reciclaje y reorganización de fragmentación
17.4.3 Flujo del algoritmo detallado del algoritmo preventivo
17.4.4 Implementación del código
17.5 Análisis en profundidad del problema de intercambio pseudo-***
17.5.1 Problema de intercambio de falso *** cuando se libera memoria
17.5.2 Análisis de probabilidad de problema de intercambio de falso ***
17.5.3 Falso *** cuando el programa de usuario usa Problema de uso compartido de memoria
17.5.4 Mejoras adicionales en la gestión de memoria distribuida
17.6 Referencias
Parte 5 Descomposición y programación de tareas
18 Tarea descomposición y programación de gráficos
18.1 Problemas con la descomposición y programación de tareas
18.1.1 Problemas al usar la programación OpenMP
18.1.2 Modelo de programación de gráficos de tareas
18.1.3 Introducción al algoritmo de programación de gráficos de tareas
18.2 Algoritmo de programación de grupos de tareas
18.2.1 Idea básica
18.2.2 Algoritmo de programación de grupos de tareas
18.2.3 Diagrama de flujo del algoritmo
18.2.4 Estructura de datos y diseño de interfaz
18.2.5 Implementación del código
18.2.6 Análisis de aplicación de programación de grupos de tareas
18.2.7 Algoritmo de programación de reducción de errores
18.3 Algoritmo de programación de gráficos de tareas
18.3.1 Algoritmo de capas de gráficos de tareas
18.3.2 Ilustración del proceso del algoritmo en capas
18.3.3 Estructura de datos y diseño de interfaz
18.3.4 Implementación de código del algoritmo en capas
18.3 .5 Implementación de código del programador de tareas
18.3.6 Ejemplo: uso del programador de gráficos de tareas
18.4 Principios y métodos de descomposición manual de tareas
18.4.1 Factores influir en el equilibrio de carga entre tareas
18.4.2 Principios y métodos de descomposición de tareas
18.5 Referencias
19 Programación y descomposición dinámica de tareas
19.1 Dos tipos de descomposición dinámica de tareas
19.2 Programación de tareas dinámicas no anidadas
19.2.1 Programación de tareas en software de servidor de red
p>19.2.2 Programación método que utiliza cola distribuida
19.2.3 Diseño de CTaskScheduler
19.2.4 Implementación de código de CTaskScheduler
19.3 Programación dinámica de tareas de tipo anidado
19.3.1 Idea básica
19.3.2 Diseño de CNestTaskScheduler
19.3.3 Implementación de código de CNestTaskScheduler
19.3 4 Cómo utilizar CNestTaskScheduler
19.4 Ejemplo: uso del programador de tareas para implementar paralelo_for
19.4.1 Implementación de paralelo_for
19.4.2 Uso de paralelo_for para clasificación rápida en paralelo
19.4 .3 Fusión paralela usando paralelo_for
19.5 Referencias
20 Conceptos básicos de la programación Lock-Free
20.1 Conceptos básicos y cuestiones de la programación Lock-Free
20.1.1Operación atómica CAS
20.1.2Problema ABA
20.1.3 Solución al problema ABA
20.1.4 Problema de eliminación de memoria
20.1.5 Problema de competencia de datos
20.2Cola sin bloqueo
20.2.1 Método de implementación en cadena de la cola sin bloqueo
20.2.2 Método de implementación en serie
20.2.3 Implementación sin bloqueo de la operación de eliminación de la cola
20.2.4 Implementación Lock-Free de la operación de cola
20.2.5 Código de implementación CLockFreeQueue
20.3 Análisis de problemas del programa Lock-Free
20.4 Referencias
Apéndice 1 Tabla de comparación entre el código de este libro y los archivos fuente del proyecto de código abierto CAPI
Apéndice 2 El ámbito de cuatro niveles de la programación multinúcleo