Qu'est-ce que le modèle mémoire C++11 et comment affecte-t-il la programmation multithread ?
Bonjour à tous. J'apprends le C++ et je suis arrivé au multithreading. J'ai lu que C++11 a introduit un "modèle mémoire" qui a tout changé. Mais je n'arrive pas à comprendre ce que cela signifie réellement et à quoi cela sert. \n\nAvant, j'écrivais quelque chose comme :\n\n```cpp\n#include \n#include \n#include \n\nint shared_data = 0;\nbool ready = false;\n\nvoid writer() {\n shared_data = 42; // Étape 1\n ready = true; // Étape 2\n}\n\nvoid reader() {\n while (!ready); // On attend que ready devienne true\n std::cout << shared_data << std::endl; // Est-ce que ce sera toujours 42 ici ?\n}\n```\n\nJe l'ai exécuté sur mon ordinateur et ça a fonctionné. Mais on m'a dit que sans le modèle mémoire et les opérations atomiques avec les bonnes barrières, ce code pourrait planter sur un autre processeur ou avec les optimisations du compilateur. Pourquoi ? Puisque je définis explicitement `shared_data` avant `ready` ! Est-ce que le compilateur ou le processeur peuvent réordonner ces opérations ? Et si oui, comment le modèle mémoire C++11 l'empêche-t-il ? Expliquez.
No answers yet.
Connectez-vous pour laisser une réponse
Blogs