Qu'est-ce que le modèle mémoire en C++11 et comment affecte-t-il la programmation multithread ?
Bonjour à tous ! J'ai commencé à étudier le multithreading en C++, et je suis tombé sur le terme "modèle mémoire" (memory model), qui est apparu dans la norme C++11. Honnêtement, je ne comprends pas complètement ce que cela signifie et à quoi cela sert.
Avant, j'écrivais des programmes simples monothread, et il me semblait que tout était clair avec la mémoire : les variables se trouvent dans la RAM, le processeur les lit et les écrit. Mais quand j'ai essayé d'écrire un exemple simple avec deux threads, j'ai commencé à avoir des problèmes étranges. Voici le code :
```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;
}
```
Je m'attendais à ce que reader imprime toujours "Value: 42", mais parfois le programme affiche "Value: 0" ou se bloque complètement. J'ai entendu dire que