¿Qué operaciones en Java se consideran atómicas?¿Qué operaciones en Java se consideran atómicas?
Respuesta
- todas las asignaciones de tipos primitivos, excepto por largos y dobles
- todas las asignaciones de referencias
- todas las asignaciones de las variables volátiles
- todas las operaciones de java.concurrent.Atomic * clases
y tal vez algo más. Mira el jls.
Como se señala en los comentarios, atomicity no implica visibilidad. Entonces, mientras que otro hilo está garantizado para no ver un int
parcialmente escrito, es posible que nunca vea el nuevo valor.
Las operaciones en larga y doble están en CPU comunes de 64 bit atomic as well, aunque no hay garantía. Vea también este feature request.
En Java, se garantiza que la lectura y escritura de cantidades de 32 bits o menores serán atómicas.
Por atómico, nos referimos a que cada acción tiene lugar en un solo paso y no se puede interrumpir. Por lo tanto, cuando tenemos aplicaciones multiproceso, las operaciones de lectura y escritura son seguras para hilos y no necesitan sincronizarse.
Por ejemplo, el siguiente código es seguro para hilos:
public class ThreadSafe
{
private int x;
public void setX(int x)
{
this.x = x;
}
}
..thread safe en el sentido de que el valor siempre será exactamente el valor original o el valor establecido. El valor más actualizado todavía no es visible para otros hilos debido a la falta de "volátil" o "sincronizado". –
+1 a lo que dice @MikkoWilkman. Esa pieza de código no debe utilizarse, ya que definitivamente no es segura para subprocesos desde la perspectiva de la visibilidad de la memoria. –
Sería parece que las asignaciones de posiciones largas son atómicas, sobre la base de este método en AtomicLong.java:
public final void set(long newValue) {
value = newValue;
}
Nota la ausencia de cualquier sincronización.
Mire la declaración de 'valor'. Es 'volátil'. – maaartinus
Ese 'valor' es' volátil' no hace que la asignación de 'valor' sea atómica, simplemente evita problemas de" publicación ". –
Hace ambas cosas, consulte [JLS, sección 17.7] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7): escribe y lee de volátil largo y los valores dobles son siempre atómicos. – maaartinus
- 1. ¿Qué operaciones son operaciones atómicas
- 2. Operaciones atómicas en ARM
- 3. Operaciones atómicas en Django?
- 4. operaciones atómicas en C++
- 5. Operaciones atómicas: debajo del capó
- 6. Operaciones atómicas en C en Linux
- 7. CUDA Lista de operaciones atómicas
- 8. Operaciones atómicas en CUDA? ¿Qué archivo de encabezado incluir?
- 9. operaciones atómicas Hilo de seguridad en gcc
- 10. operaciones atómicas para shared_ptr en C++ 11
- 11. por qué std :: shared_ptr usa operaciones de CPU atómicas
- 12. ¿Qué operaciones de sistema de archivos deben ser atómicas?
- 13. Operaciones atómicas MySQL y bloqueo de tabla
- 14. x86 operaciones atómicas de 128 bits
- 15. ¿Qué se consideran átomos en Scheme?
- 16. Operaciones atómicas en varios sistemas externos sin transacción
- 17. ¿Cómo lograr operaciones atómicas (modelo de concurrencia) en JavaScript?
- 18. Operaciones atómicas en C++ para estructuras sin cerradura
- 19. Memcached - ¿Las operaciones GET y SET son atómicas?
- 20. ¿La asignación de referencia y la lectura de operaciones atómicas?
- 21. ¿Las operaciones de rsync son atómicas a nivel de archivo?
- 22. Fetch-and-add usando las operaciones atómicas de OpenMP
- 23. Las operaciones de atomic.h parecen no ser atómicas
- 24. ¿Se vuelven más lentas las operaciones atómicas a medida que se agregan más CPU?
- 25. ¿Las enumeraciones de Java se consideran primitivas o de referencia?
- 26. ¿Se consideran iframes 'mala práctica'?
- 27. Costos de operaciones en Java
- 28. ¿Por qué las enumeraciones se consideran tipos compuestos?
- 29. ¿Por qué las variables globales se consideran malas prácticas?
- 30. Qué características C99 se consideran dañinas o no compatibles
Las asignaciones a longitudes y dobles 'volátiles' están garantizadas para ser atómicas: http://java.sun.com/docs/books/jls/third_edition/html/memory.html#17.7 –
Además, tenga en cuenta que, si bien las operaciones son atómicas, la visibilidad de esas operaciones podría no estar garantizada en una aplicación multiproceso a menos que se tenga cuidado especial (los detalles aquí son * forma * complicados de describir en un comentario ...) – nos
64 bit jvm, asignaciones largas y dobles también son atómicos .. –