in

java – ¿Qué significa «atómico» en programación?

apple touch icon@2

Aquí hay un ejemplo: supongamos foo es una variable de tipo long, entonces la siguiente operación no es una operación atómica (en Java):

foo = 65465498L;

De hecho, la variable se escribe usando dos operaciones separadas: una que escribe los primeros 32 bits y una segunda que escribe los últimos 32 bits. Eso significa que otro hilo podría leer el valor de fooy vea el estado intermedio.

Hacer que la operación sea atómica consiste en utilizar mecanismos de sincronización para asegurarse de que la operación sea vista, desde cualquier otro hilo, como una operación única, atómica (es decir, no dividible en partes). Eso significa que cualquier otro hilo, una vez que la operación se hace atómica, verá el valor de foo antes de la asignación o después de la misma. Pero nunca el valor intermedio.

Una forma sencilla de hacer esto es hacer que el variable volátil:

private volatile long foo;

O para sincronizar cada acceso a la variable:

public synchronized void setFoo(long value) {
    this.foo = value;
}

public synchronized long getFoo() {
    return this.foo;
}
// no other use of foo outside of these two methods, unless also synchronized

O reemplazarlo con un AtomicLong:

private AtomicLong foo;

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Unix / Linux – Entorno

aTbm2Pf2QHySB8ko9rei4W 1200 80

Los villanos más peligrosos del Universo DC