2010-06-13 5 views

Respuesta

9

Si su suposición se cumple, entonces no hay problemas.

+0

¿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

+0

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

+1

@Kris, @JaredPar: Cierto, pero estoy respondiendo la pregunta del OP como se dijo. :-) –

0

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.

0

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.

3

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.

7

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.

+0

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

+0

@zebrabox, muy cierto. Traté de tener cuidado con la respuesta porque es extremadamente específica de la plataforma language +. – JaredPar

Cuestiones relacionadas