2010-07-13 13 views

Respuesta

6

Si solo está leyendo los datos, entonces no se requieren bloqueos.

Si está escribiendo los datos Y le importa que los datos de la orden se lean, entonces necesita usar CS para asegurarse de que el orden sea correcto. (Tenga en cuenta que si el objeto tiene un estado más complejo que no se actualiza en una operación atómica, entonces puede que le interese más el orden de las lecturas/escrituras).

+0

Si no le importa el orden, aún desea cambiar la variable a volátil, ¿no? – Inverse

+0

El uso de volátil depende de la arquitectura del compilador en lo que significa en términos de multi-threading. Lea la documentación apropiada. –

1

Si nada cambia los datos, entonces en la mayoría de las arquitecturas, no es así. Pero si nada cambia los datos, el código no tiene sentido.

+0

Eso es lo que estaba pensando. – GManNickG

+6

Es muy útil inicializar algunos globales antes de generar hilos adicionales, y a partir de ese momento los datos se comparten, pero nunca se vuelven a escribir. –

0

Si su ejemplo está destinado a estar completo entonces no, no tiene que bloquear o administrar ninguna sección crítica ya que no está modificando nada.

Pero ejemplo, ya que es, es sólo inútil ..

No es necesario para manejar la concurrencia cuando hay temas que son sólo de lectura de datos sin formato (las cosas son diferentes en estructuras de datos iterables), pero esto es útil solo cuando tienes datos estáticos que no necesitan ser cambiados. Tan pronto como agrega solo un escritor, debe asegurarse de que cuando se escribe nadie esté leyendo, pero todos podrán leer al mismo tiempo que otros lectores si ningún escritor está haciendo su trabajo.

0

No necesita bloquear cuando no está modificando la memoria compartida, pero su ejemplo sería bastante inútil ya que inicializa data, verifica su valor, pero nunca lo modifica ... el segundo hilo es va a ser completamente inútil. ¿Modifica la variable data en cualquier lugar?

+0

solo hace que mi código sea menos, tengo un archivo .ini que se lee y establece los datos antes de que se inicien los hilos, necesito acceder a esa información desde varios hilos más adelante, sin modificar :) no es inútil, la aplicación es muy grande :)) – Tenev

+0

@tenev, no estoy tratando de decir que lo que estás haciendo es inútil, pero el ejemplo que nos provees implica que el segundo hilo no hará nada porque "datos" SIEMPRE son 5 ... – Kiril

1

Si los datos se cambian por un hilo diferente, entonces necesita una cerca de memoria al leerlo para garantizar la consistencia. Un bloqueo es una forma de lograr una valla de memoria, pero no necesariamente la óptima. Sin embargo, a menos que encuentre (¡a través de la medición!) Que el bloqueo está ralentizando significativamente su programa, probablemente no valga la pena preocuparse por las alternativas.

Cuestiones relacionadas