O que é o modelo de memória em C++11 e como ele afeta a programação multithread?
Olá a todos! Comecei a estudar multithreading em C++ e me deparei com o termo "modelo de memória" (memory model), que apareceu no padrão C++11. Sinceramente, não entendo completamente o que isso significa e para que serve.
Antes, eu escrevia programas single-thread simples e achava que a memória era algo óbvio: as variáveis ficam na RAM, o processador as lê e escreve. Mas quando tentei escrever um exemplo simples com duas threads, comecei a ter problemas estranhos. Aqui está o 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;
}
```
Eu esperava que reader sempre imprimisse "Value: 42", mas às vezes o programa exibe "Value: 0" ou simplesmente trava. Ouvi dizer que