¿Qué es el mecanismo CAS? ¿Cuáles son las desventajas y qué problemas ocurrirán?

CAS es la abreviatura de la palabra inglesa Compare And Swap. Traducido es comparar y reemplazar.

Se utilizan tres operandos básicos en el mecanismo CAS: la dirección de memoria V, el antiguo valor esperado A y el nuevo valor B a modificar.

Desventajas de CAS:

1. Gran sobrecarga de CPU

En el caso de una cantidad relativamente alta de concurrencia, si muchos subprocesos intentan actualizar repetidamente una determinada variable, pero la actualización no tuvo éxito, el ciclo ejercerá mucha presión sobre la CPU.

2. No se puede garantizar la atomicidad del bloque de código.

Lo que garantiza el mecanismo CAS es solo la operación atómica de una variable, no la atomicidad de todo el bloque de código. Por ejemplo, si necesita asegurarse de que las tres variables se actualicen atómicamente, debe usar Sincronizado.

3. problema ABA

Este es el mayor problema con el mecanismo CAS.

¿Cuál es el problema ABA?

Para citar el libro original: si los nodos en el algoritmo pueden reciclarse, entonces este problema puede ocurrir cuando se usa la instrucción "comparar e intercambiar". En la operación CAS, se juzgará si "el valor de V sigue siendo A", y En caso afirmativo, continúe realizando la operación de actualización. En algunos algoritmos, si el valor de V cambia primero de A a B, y luego de B a A, entonces CAS funcionará con éxito.

¿Cómo evitar problemas de ABA?

Java proporciona AtomicStampedReference y AtomicMarkableReference para resolver el problema ABA.

Publicado 133 artículos originales · elogiado 85 · visitas 7430

Supongo que te gusta

Origin blog.csdn.net/weixin_45151795/article/details/105682386
Recomendado
Clasificación