Programación concurrente CAS de JUC

Tabla de contenido

1. ¿Qué es CAS?

1.1 Definición de CAS

1.2 Escenarios de aplicación de CAS

2. El principio de CAS

2.1 Operaciones de comparación e intercambio

2.2 Principio de implementación de CAS

2.3 Problemas ABA y soluciones de CAS

3. SAC en Java

3.1 java.util.concurrent.atomic 包

3.2 AtomicInteger 与 AtomicLong

3.3 Solución al problema ABA: AtomicStampedReference y AtomicMarkableReference

4. Ventajas y desventajas de CAS

4.1 Ventajas: rendimiento de alta simultaneidad sin bloqueos

4.2 Desventajas: número de giros, problema ABA


1. ¿Qué es CAS?

1.1 Definición de CAS

CAS, o Compare and Swap, es una tecnología utilizada en la programación concurrente para implementar operaciones atómicas en un entorno de subprocesos múltiples. Es un algoritmo sin bloqueo para resolver problemas de sincronización de datos en un entorno de subprocesos múltiples. La operación CAS tiene tres operandos: la ubicación de memoria V, el antiguo valor esperado A y el nuevo valor B que se va a escribir. Solo si el valor en la ubicación de memoria es igual al antiguo valor esperado A, el nuevo valor B se escribe en la ubicación de memoria V; de lo contrario, no hace nada. Las operaciones de CAS son atómicas, lo que garantiza la coherencia de los datos y la seguridad de los subprocesos en un entorno de subprocesos múltiples.

1.2 Escenarios de aplicación de CAS

CAS se utiliza principalmente para resolver el problema de la competencia de datos en un entorno de subprocesos múltiples. Por ejemplo, cuando varios subprocesos modifican variables compartidas al mismo tiempo, pueden producirse inconsistencias en los datos. CAS se usa comúnmente en los siguientes escenarios:

  • Operación de contador: aumente o disminuya el contador en un entorno de subprocesos múltiples para garantizar la corrección del conteo.
  • Contenedor simultáneo: al implementar contenedores simultáneos (como colas simultaneas y colecciones simultaneas), se garantiza la atomicidad de las operaciones de datos en un entorno de subprocesos múltiples.
  • Comprobaciones de seguridad de subprocesos: al comprobar y establecer el estado de un objeto, garantiza la corrección del estado.
  • Implementación de bloqueo optimista: en bases de datos distribuidas y cachés, se utiliza para implementar el mecanismo de bloqueo optimista y reducir la competencia de bloqueo.

2. El principio de CAS

2.1 Operaciones de comparación e intercambio

El núcleo de la operación CAS es la operación Comparar e Intercambiar (Compare and Exchange). Lo hace comparando el valor actual de la ubicación de memoria con el valor esperado y, si son iguales, escribe el nuevo valor en la ubicación de memoria; de lo contrario, no hace nada. Este proceso es atómico, es decir, no es interrumpido por otros hilos durante la operación de comparación e intercambio.

2.2 Principio de implementación de CAS

La implementación de las operaciones CAS depende del soporte de hardware subyacente y, por lo general, se implementa mediante instrucciones atómicas proporcionadas por el procesador. En los procesadores multinúcleo modernos, las instrucciones específicas (como la instrucción CMPXCHG en la arquitectura x86) generalmente se usan para realizar operaciones CAS. Estas instrucciones garantizan que las operaciones de comparación e intercambio se realicen dentro de un solo ciclo de instrucción, garantizando así la atomicidad de la operación.

2.3 Problemas ABA y soluciones de CAS

Aunque la operación CAS puede garantizar la coherencia de los datos y la seguridad de los subprocesos, puede encontrar problemas de ABA. El problema ABA se refiere a: si un valor no cambia antes y después de la operación CAS, pero sufre múltiples cambios durante la operación, puede causar que la operación CAS sea inexacta.

Una forma común de resolver el problema de ABA es usar números de versión o bits de marca. Las clases AtomicStampedReference y AtomicMarkableReference se proporcionan en el paquete concurrente de Java para resolver este problema. AtomicStampedReference usa un número de versión para marcar, mientras que AtomicMarkableReference usa un bit de marca booleano.

3. SAC en Java

3.1 java.util.concurrent.atomic 包

Java proporciona el paquete java.util.concurrent.atomic, que contiene algunas clases atómicas basadas en CAS para implementar operaciones atómicas en un entorno de subprocesos múltiples. Estas clases incluyen AtomicInteger, AtomicLong, AtomicBoolean, etc.

3.2 AtomicInteger 与 AtomicLong

AtomicInteger y AtomicLong se utilizan para operaciones atómicas en enteros y enteros largos respectivamente. Proporcionan una serie de métodos, como get, set, getAndIncrement, getAndSet, etc., que pueden garantizar la atomicidad de las operaciones en un entorno de subprocesos múltiples.

3.3 Solución al problema ABA: AtomicStampedReference y AtomicMarkableReference

Para resolver el problema de ABA que se puede encontrar en las operaciones CAS, el paquete concurrente de Java proporciona las clases AtomicStampedReference y AtomicMarkableReference. Estas dos clases evitan la aparición de problemas ABA mediante la introducción de números de versión o bits de marca en función de las operaciones CAS.

4. Ventajas y desventajas de CAS

4.1 Ventajas: rendimiento de alta simultaneidad sin bloqueos

La operación CAS es un algoritmo sin bloqueo. En comparación con el mecanismo de bloqueo tradicional, reduce el bloqueo de subprocesos y la sobrecarga de conmutación, lo que mejora el rendimiento de la concurrencia. En un entorno de alta concurrencia, CAS puede aprovechar mejor las ventajas de los procesadores multinúcleo y mejorar el rendimiento del sistema.

4.2 Desventajas: número de giros, problema ABA

Una desventaja de la operación CAS es que el número de giros puede ser demasiado.Si la operación CAS no se puede ejecutar con éxito dentro de un cierto período de tiempo, el subproceso continuará girando y desperdiciando recursos de la CPU. Además, las operaciones de CAS pueden encontrar problemas de ABA, que deben resolverse utilizando números de versión o bits de marca.

Supongo que te gusta

Origin blog.csdn.net/qq_43649937/article/details/132175771
Recomendado
Clasificación