¿Cómo puedo hacer que una matriz sea volátil? Porque, como he llegado a entender, ¿no es seguro hacer una matriz volátil?matriz volátil Java?
Respuesta
Declarar una matriz volátil NO otorga acceso volátil a sus campos. estás declarando que la referencia en sí misma es volátil, no sus elementos.
En otras palabras, está declarando un conjunto volátil de elementos, no un conjunto de elementos volátiles. La solución aquí es usar AtomicIntegerArray en caso de que quiera usar enteros. Otra forma (pero un poco feo) es volver a escribir la referencia a la matriz cada vez que se edita un campo
lo haces por
arr = arr;
(como ya he dicho ... feo)
AtomicLongArray, AtomicIntegerArray, AtomicReferenceArray (java.util.concurrent.atomic).
EDITAR: matrices objetos en java. si hace que la referencia a ese objeto sea volátil, la hace visible para otros hilos si cambia la referencia a la matriz. Sin embargo, esto no es válido para los valores de la matriz.
Obteniendo un mejor conocimiento del modelo de memoria Java, existe la posibilidad de evitarlo sin una matriz Atomic *. Utilizando la relación sucedido antes de volátiles lecturas y escrituras normales hace que sea posible:
si el hilo A escribe un poco de materia no volátil y una variable volátil después que, hilo B está garantizado para ver los cambios de la materia volátil también, pero solo si el hilo B lee primero la variable volátil. ver también: Happens-before relationships with volatile fields and synchronized blocks in Java - and their impact on non-volatile variables?
Para matrices, esto significa: Después de escribir a la matriz, escriba a alguna variable de estado volátil (asegúrese de que la escritura de hecho cambia la variable de estado volátil!) Cuando se lee a partir de la matriz , lea primero la variable de estado volátil y luego acceda a la matriz. La lectura volátil debe hacer que todas las demás escrituras también sean visibles, siempre que ocurran antes.
ANTIGUO: escribiendo la auto referencia arr=arr
en realidad no ayudaría.
Escriba la dirección de la matriz arr
, no el valor del campo arr[i]
. Por lo tanto, aún no obtiene propiedades volátiles para arr[i]
(que desee), pero solo para la dirección de almacenamiento arr
.
La entrada de blog se ha mencionado anteriormente de Jeremy Manson explica en detalle: http://jeremymanson.blogspot.com/2009/06/volatile-arrays-in-java.html
Su mejor solución es utilizar Atómica * matrices, a saber, la AtomicReferenceArray de tipos genéricos (también existen formas especiales para los tipos básicos). No puedo imaginar que esto sea particularmente eficiente, especialmente porque te permite obtener más propiedades que las que necesitas (atomicidad >> volátil).
Una alternativa pueden ser las estructuras de pointer donde los contenedores usan campos de punteros volátiles. También no es tan eficiente ...
- 1. C# elementos de matriz volátil?
- 2. Java volátil pregunta variables
- 3. Java referencia volátil vs AtomicReference
- 4. Palabra clave volátil en Java - Clarificación
- 5. es una variable volátil sincronizada? (java)
- 6. Modificador volátil Java y bloques sincronizados
- 7. Volátil con sincronizados juntos
- 8. sobrecarga volátil?
- 9. DateTime volátil
- 10. Variable volátil
- 11. ¿Puede la variable volátil definirse como estática en Java?
- 12. Cuándo usar volátil vs sincronización en multihilo en java?
- 13. ¿Por qué hacer un método volátil en Java?
- 14. Uso del especificador volátil en C/C++/Java
- 15. ¿Cómo puedo usar correctamente la palabra clave volátil en Java?
- 16. ¿Cuándo utiliza exactamente la palabra clave volátil en Java?
- 17. ¿Cómo funciona realmente el volátil?
- 18. ¿Dónde usar volátil?
- 19. Android volátil no funciona?
- 20. Visual C++ Volátil
- 21. equivalente volátil en VB.NET
- 22. Semántica volátil en C99
- 23. puntero volátil y const
- 24. ¿Es necesario volátil aquí?
- 25. Boolean volátil vs AtomicBoolean
- 26. Enclavado y volátil
- 27. ¿Volátil o sincronizado para el tipo primitivo?
- 28. Uso apropiado de volátil sig_atomic_t
- 29. volátil y Thread.MemoryBarrier en C#
- 30. C++ variables de subprocesamiento volátil
http: //jeremymanson.blogspot.com/2009/06/volatile-arrays-in-java.html –