Hablando desde CAS, el rendimiento realmente alto resuelve el funcionamiento atómico de la programación concurrente

Hoy es el primer día del plan original de 365 días de Ape Lighthouse.
Inserte la descripción de la imagen aquí

1. Operación atómica

Operación atómica: la atomicidad es ininterrumpida en una operación, o todas las ejecuciones tienen éxito o todas las ejecuciones no tienen éxito, con la sensación de "vivir juntos". Cuando se ejecutan varios subprocesos juntos a tiempo, una vez que se inicia una operación, otros subprocesos no lo interferirán.
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

El método para encontrarlo en la parte inferior del código fuente proviene de:
Inserte la descripción de la imagen aquí
continuar profundizando: se
Inserte la descripción de la imagen aquí
encuentra que el principio de implementación real de este método es CAS.

Inserte la descripción de la imagen aquí

2. CAS

compare and swap compare and swap
pertenece a la primitiva de sincronización de hardware pertenece a la CPU La instrucción puede modificar directamente el procesador de memoria proporciona una garantía atómica de las operaciones básicas de memoria. Observe el esquema de CAS:
Inserte la descripción de la imagen aquí
CAS requiere 3 operandos: la dirección de memoria N, el antiguo valor esperado E y el valor objetivo N se actualizarán pronto.

Cuando se ejecuta la instrucción CAS, si y solo si el valor de la dirección de memoria V es igual al valor esperado A, modifique el valor de la dirección de memoria V a B, de lo contrario no se hará nada. Toda la operación de comparar y reemplazar es una operación atómica.

Primero lea el valor de la variable inicial N y guárdelo en la variable E, luego, en la operación ++, el valor del resultado calculado se almacena en la variable V,

Luego, escriba el valor E y compárelo con el valor N. Si el valor E es consistente con el valor N en este momento, la operación finaliza directamente, de lo contrario continuará repitiéndose desde el principio, por lo que el CAS también se llama bloqueo de giro , O sin bloqueo.

JVM proporciona una clase de herramienta insegura

Inseguro es la clase principal de CAS. Dado que el método java no puede acceder directamente al sistema subyacente, debe accederse a él a través de un método nativo. Inseguro es equivalente a una puerta trasera. Basado en esta clase, puede manipular directamente los datos en la memoria específica. La clase Unsafe existe en el paquete sun.misc, y sus operaciones de método interno pueden manipular directamente la memoria como punteros en C, porque la ejecución de operaciones CAS en java depende de los métodos de la clase Unsafe

La siguiente es una demostración de código:
Inserte la descripción de la imagen aquí

Tres, problema ABA

La raíz del problema ABA es que cuando cas está modificando una variable, no puede registrar el estado de la variable, como el número de modificaciones y si la variable ha sido modificada. Esto facilita el cambio de A a B cuando un subproceso cambia de B a A, lo que hace que la caja se ejecute varias veces.

Solución : AtomicStampReference

AtomicStampReference agrega un sello de marcador sobre la base de cas. El uso de este marcador se puede utilizar para detectar si los datos han cambiado, trayendo una prueba práctica a los datos. Tiene los siguientes parámetros:

// Los significados de los parámetros representan el valor esperado, el nuevo valor escrito, la marca esperada y el nuevo valor de la marca

publicbooleancompareAndSet(Vexpected,VnewReference,intexpectedStamp,intnewStamp);

public V getRerference();

public int getStamp();

publicvoidset(VnewReference,int newStamp);

No demostraré el código ~ ¡Espero que este artículo te ayude!

Todos pueden escanear el código para unirse, los 365 días del día secan constantemente
Inserte la descripción de la imagen aquí

Ape Lighthouse: ¡Conviértete en una luz de guía para los técnicos!

Número público: Fame Master Ape Lighthouse /

Sina Weibo: @ 名师 grupo

16 artículos originales publicados · Me gusta0 · Visitas 348

Supongo que te gusta

Origin blog.csdn.net/MSYDTT/article/details/105133809
Recomendado
Clasificación