Programación General > C/C++
Programación Asíncrona
m0skit0:
Sí, volatile es para indicarle al compilador que esta variable puede cambiar de valor de forma asíncrona, por tanto no puede fiarse de la caché de instrucciones por ejemplo.
EDITO: caché de datos quiero decir
Leber:
Hostia, pues que raro, en ninguno de los manuales que lei acerca de hilos en POSIX hablaban acerca de esto.
m0skit0:
volatile no tiene nada que ver con POSIX, es algo del compilador.
Leber:
Bueno, me refería a que cuando leia los tutoriales que mostraban como usar hilos con pthreads, no vi que las variables que usaban los distintos hilos fuesen volatile.
rfog:
--- Cita de: "Leber" ---Yo había he usado hilos, en códigos mios para aprender, y si que se que para modificar secciones críticas lo mejor es bloquear el mutex y luego desbloquearlo, lo que no sabía es que las variables debían ser volatiles.
Saludos
--- Fin de la cita ---
Eso es porque nunca lo has probado en entornos multicore o multiprocesador... Hasta en un micro HyperThreading no hay problema porque comparten caché y memoria, pero con un sistema multiprocesador sí, y más todavía si utiliza arquitectura numa completa. En ese caso, dependiendo del compilador, ni siquiera con volatile es suficente.
Con todo, al menos Visual C++ es lo suficientemente inteligente como para detectar el uso de una variable compartida y optimizarla sin perder la sincronización.
Respecto a los mutex, al menos en Windows son objetos del núcleo y son caros en tiempo de proceso y de ejecución, por lo que para sincronización entre hilos de un mismo proceso se recomiendan las secciones críticas porque son objetos locales mantenidos por el compilador y el runtime, mucho más rápidos y eficientes.
Navegación
[*] Página Anterior
Ir a la versión completa