Avatar ·

¿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.