Vengo en gran parte de un fondo de C++, pero creo que esta pregunta se aplica a enhebrar en cualquier idioma. Este es el escenario:¿Cómo hacen frente los sistemas con hilos a los datos compartidos que están siendo almacenados en caché por diferentes CPU?
tenemos dos hilos (ThreadA y ThreadB), y un valor de x en la memoria compartida
Suponga que el acceso a x está controlado apropiadamente por un mutex (u otro control de sincronización adecuado)
Si los subprocesos se ejecutan en diferentes procesadores, ¿qué sucede si ThreadA realiza una operación de escritura, pero su procesador coloca el resultado en su caché L2 en lugar de en la memoria principal? Entonces, si ThreadB intenta leer el valor, ¿no solo buscará en su propio caché L1/L2/memoria principal y luego trabajará con cualquier valor antiguo que haya allí?
Si ese no es el caso, ¿cómo se maneja este problema?
Si ese es el caso, ¿qué se puede hacer al respecto?
Muchas gracias por esta respuesta. Me he preguntado si algún tipo de mecanismo de nivel de hardware debe entrar en juego aquí, porque parecía que había límites prácticos sobre lo que podría lograrse a nivel de lenguaje/compilador. – csj