¿Qué es el modelo de memoria de C++11 y cómo afecta a la programación multihilo?
Hola a todos. Estoy estudiando C++ y he llegado a la programación multihilo. Leí que en C++11 apareció un "modelo de memoria" que lo cambió todo. Pero no puedo entender qué significa realmente y para qué sirve.
Antes escribía algo como:
```cpp
#include
#include
#include
int shared_data = 0;
bool ready = false;
void writer() {
shared_data = 42; // Paso 1
ready = true; // Paso 2
}
void reader() {
while (!ready); // Esperamos hasta que ready sea true
std::cout << shared_data << std::endl; // ¿Siempre será 42 aquí?
}
```
Lo ejecutaba en mi computadora y funcionaba. Pero me dijeron que sin el modelo de memoria y operaciones atómicas con las barreras correctas, este código podría fallar en otro procesador o con optimizaciones del compilador. ¿Por qué? ¡Si establezco explícitamente `shared_data` antes que `ready`! ¿Acaso el compilador o el procesador pueden reordenar estas operaciones? Y si es así, ¿cómo lo previene el modelo de memoria de C++11? Explíquenme.
No answers yet.
Inicia sesión para dejar una respuesta