Avatar ·

O que é o modelo de memória C++11 e como ele afeta a programação multithread?

Olá a todos. Estou estudando C++ e cheguei em multithreading. Li que no C++11 surgiu um tal de "modelo de memória" que mudou tudo. Mas não consigo entender o que isso significa e para que serve. Antes eu escrevia algo como: ```cpp #include #include #include int shared_data = 0; bool ready = false; void writer() { shared_data = 42; // Passo 1 ready = true; // Passo 2 } void reader() { while (!ready); // Espera até ready se tornar true std::cout << shared_data << std::endl; // Será sempre 42 aqui? } ``` Eu executava isso no meu computador e funcionava. Mas me disseram que sem o modelo de memória e operações atômicas com as barreiras corretas, esse código pode quebrar em outro processador ou com otimizações do compilador. Por quê? Afinal, eu explicitamente defino `shared_data` antes de `ready`! Será que o compilador ou o processador podem reordenar essas operações? E se sim, como o modelo de memória C++11 impede isso? Expliquem.