Suponiendo que la variable no está en riesgo de ser modificada durante las lecturas, ¿hay algún problema inherente en que una variable sea leída por 2 o más hilos al mismo tiempo?son lecturas simultáneas de una variable segura para subprocesos?
Respuesta
Si su suposición se cumple, entonces no hay problemas.
Dado que las bases de datos pueden usar comúnmente shared read locks, donde cualquier número de clientes puede leer el mismo bloque, sugeriría que no hay problemas inherentes directos.
Sí en tres caracteres.
Edit: Whoops. Sí, es seguro para subprocesos. No, no hay problemas La gente generalmente pregunta si algo es seguro para subprocesos, no si es inseguro.
Mientras sea una variable simple, no hay riesgo.
Si es una propiedad, su lectura puede tener posiblemente efectos secundarios, por lo que no se garantiza que sea segura para la ejecución de subprocesos.
No, esta operación no es inherentemente segura para hilos.
Aunque la variable no se está escribiendo actualmente, es posible que las escrituras anteriores en la variable no estén visibles para todos los subprocesos. Esto significa que dos hilos pueden leer el mismo valor y obtener resultados diferentes creando una condición de carrera.
Esto puede evitarse mediante barreras de memoria, el uso correcto de volátiles o algunos otros mecanismos. Necesitaríamos saber más sobre su entorno, en particular el idioma, para dar una explicación completa.
Una ligera reformulación de su pregunta proporciona una mejor respuesta. Suponiendo que no hay más escrituras y todas las escrituras anteriores son visibles para el hilo actual, entonces sí es seguro leer el valor de varios hilos.
Buena respuesta, aunque el uso de volátiles realmente depende del idioma. En c/C++, volátil es un falso amigo definido ya que el código generado es muy específico del compilador y no es un estándar para decir lo que una variable volátil realmente debería hacer – zebrabox
@zebrabox, muy cierto. Traté de tener cuidado con la respuesta porque es extremadamente específica de la plataforma language +. – JaredPar
- 1. ¿Es java.lang.Thread una clase segura para subprocesos?
- 2. ¿Cómo puedo implementar una envoltura de lista segura para subprocesos en Delphi?
- 3. Compilación de una extensión PHP como no segura para subprocesos
- 4. punteros que regresan de una manera segura para los subprocesos
- 5. ¿La inicialización de la variable de miembro estática de C++ es segura para subprocesos?
- 6. ¿Qué PEP son lecturas obligadas?
- 7. ¿La serialización java.util.Vector es segura para subprocesos?
- 8. ¿Hay una implementación de grupo de objetos C++ segura y segura para subprocesos?
- 9. ¿Los métodos de IEnumerable Linq son seguros para subprocesos?
- 10. Por qué la variable de instancia en Servlet no es segura para subprocesos
- 11. ¿La implementación de glibc de fprintf() es segura para subprocesos?
- 12. ¿Las 'lecturas' variables volátiles son tan rápidas como las lecturas normales?
- 13. Inicialización segura de subprocesos de variables estáticas
- 14. Java: ¿Son posibles las lecturas y escrituras simultáneas en un SocketChannel de bloqueo a través de Object (In | Out) putStreams?
- 15. ¿La conexión TADOConnection de Delphi es segura para subprocesos?
- 16. Java: ¿la clase de excepción es segura para subprocesos?
- 17. ¿Es esta implementación de Singleton correcta y segura para subprocesos?
- 18. ¿Esta combinación de ConcurrentDictionary y ConcurrentQueue es segura para subprocesos?
- 19. ¿La clase stdlib Logger de Ruby es segura para subprocesos?
- 20. .net: ¿Asigna una referencia de objeto atómica (es decir, segura para subprocesos)?
- 21. Clase segura para subprocesos en Java mediante bloques sincronizados
- 22. Cola segura para subprocesos en Javascript o jQuery
- 23. ¿Los delegados de C# son seguros para subprocesos?
- 24. ¿Los contenedores integrados de Python son seguros para subprocesos?
- 25. ¿Por qué la lectura no es segura para subprocesos?
- 26. ¿Es esta la manera correcta de implementar una propiedad Guid de lectura/escritura segura para subprocesos?
- 27. ¿Es esta una implementación de Singleton válida, floja y segura para subprocesos para C#?
- 28. Ajuste seguro de subprocesos de una variable (Java)?
- 29. ¿Cómo etiquetar que una clase es segura para subprocesos (o no)?
- 30. ¿Cómo iterar sobre un contenedor de una manera segura para la ejecución de subprocesos?
¿No es el problema averiguar si su suposición es válida? (que podría no, ver la respuesta de guffa: http://stackoverflow.com/questions/3033425/are-simultaneous-reads-of-a-variable-thread-safe/3033439#3033439) – Kris
Aunque actualmente no hay escrituras , un derecho anterior puede no ser visible para todos los hilos creando una condición de carrera. Ver mi respuesta para más detalles. – JaredPar
@Kris, @JaredPar: Cierto, pero estoy respondiendo la pregunta del OP como se dijo. :-) –