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.