Programación General > C/C++

 Programación Asíncrona

<< < (3/3)

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

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa