Quel est le modèle de mémoire de la simultanéité en C++03?
(Et le C++11 modifier le modèle de mémoire à l'appui de la simultanéité de mieux?)
Quel est le modèle de mémoire de la simultanéité en C++03?
(Et le C++11 modifier le modèle de mémoire à l'appui de la simultanéité de mieux?)
Le C++ modèle de mémoire est la spécification de quand et pourquoi la mémoire physique est en lecture/écrite à l'égard de code C++.
Jusqu'à la prochaine norme C++, le C++ de la mémoire de modèle est le même que le C. le C++0x standard, un modèle de mémoire approprié pour le multithreading est prévu pour être inclus (voir ici), et il en sera probablement de la prochaine révision de la norme C C1X. La version actuelle est rudimentaire:
Ainsi, l'état actuel est: C++ opérations de mémoire ne sont que spécifié lorsque vous avez 1 processus, avec son thread principal et de ne pas écrire du code qui dépend d'un classement spécifique de variable de lecture/écriture et c'est tout. En substance, cela signifie que, hormis le traditionnel programme "hello world" vous êtes foutus.
Bien sûr, vous serez invite à ajouter que "cela fonctionne aujourd'hui sur ma machine, vous ne pouvez pas éventuellement être droite". La phrase correcte serait "il travaille aujourd'hui sur ma machine avec cette combinaison spécifique de matériel, système d'exploitation (thread library) et un compilateur qui connaissent suffisamment les uns des autres pour mettre en place quelque chose qui est un peu de travail, mais se cassera probablement à un certain point".
Ok ok, c'est un peu dur, mais l'enfer, même Herb Sutter reconnaît que (suffit de lire l'intro) et il parle de toutes les versions 2007 de l'un des plus omniprésents C/C++ de la chaîne...
La norme C++ comité tente de venir avec quelque chose qui permettra d'aborder toutes ces questions tout en étant moins contraignant (et donc plus performants) que Java du modèle de mémoire.
Hans Boehm a rassemblé ici quelques liens vers des articles sur la question, à la fois académique et du comité C++.
Voir quelques autres réponses, il semble que de nombreux programmeurs C++ ne sont même pas conscients de ce que le "modèle de mémoire", vous demandez au sujet des moyens.
La questions est sur le modèle de mémoire dans le sens: quelles garanties (le cas échéant) à propos de lecture / écriture de la réorganisation (qui peut se produire sur le compilateur côté ou sur l'exécution de côté)? Cette question est très importante pour la programmation multithread, car sans ces règles d'écriture correcte multithread programmes n'est pas possible, et quelque peu surprenant de vérité est avec manque actuel de la mémoire explicite modèle de nombreux multithread programmes de travail plus ou moins "par pure chance" - le plus souvent grâce à des compilateurs en supposant que le pointeur de l'aliasing à travers des appels de fonction. - voir les Threads Ne peuvent pas être mis en œuvre comme une Bibliothèque
Dans le courant de C++ il n'y a pas de standard d'une mémoire de modèle. Certains compilateurs définir le modèle de mémoire pour les variables, mais ce n'est pas une procédure standard. C++0x définit de nouveaux "atomique" primitives pour ce but. Exhaustive point de départ pour vérifier ce dernier état est peut être trouvé à des Threads et de la mémoire de modèle pour le C++
Des liens importants sont également de la Simultanéité de la mémoire de modèle, les Types Atomiques et C++ de Données-la Dépendance de la Commande: Atomics et de la Mémoire de Modèle standard propositions.
Malheureusement, en C++ il n'y a pas de "Modèle de Mémoire Standard", comme celle de Java. La réelle mise en œuvre est laissée à l'compilateur, les bibliothèques et les transformateurs.
Ainsi, le C++ modèle de mémoire == chaotique mix-mélo de modèles, ce qui signifie que vous devez toujours essayer d'écrire coffre-fort à code qui ne s'appuie pas sur un modèle de mémoire, et qui va du vissage de la programmation en tant que bien, parce que le compilateur ne peut faire de l'optimisation, il veut en dehors d'une section critique, même en dehors du traitement de la commande!
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.