¿Qué es el modelo de memoria en C++11 y cómo afecta a la programación multihilo?
¡Hola a todos! Empecé a estudiar la programación multihilo en C++ y me topé con el término "modelo de memoria" (memory model), que apareció en el estándar C++11. Honestamente, no termino de entender qué significa y para qué sirve.
Antes escribía programas simples de un solo hilo, y me parecía que todo con la memoria era claro: las variables están en la RAM, el procesador las lee y escribe. Pero cuando intenté escribir un ejemplo simple con dos hilos, empecé a tener problemas extraños. Aquí está el código:
```cpp
#include
#include
bool flag = false;
int value = 0;
void writer() {
value = 42;
flag = true;
}
void reader() {
while (!flag) {}
std::cout << "Value: " << value << std::endl;
}
int main() {
std::thread t1(writer);
std::thread t2(reader);
t1.join();
t2.join();
return 0;
}
```
Esperaba que reader siempre imprimiera "Value: 42", pero a veces el programa muestra "Value: 0" o incluso se cuelga. He oído que