10 votes

Quels sont les exemples de barrières de mémoire en C++ ?

Je vois que les mutex de C++11 ne sont pas verrouillés. void lock() volatile . Comment le compilateur sait-il quelles fonctions sont des barrières mémoire et lesquelles ne le sont pas ? Toutes les fonctions sont-elles des barrières même si elles ne sont pas volatiles ? Quelles sont les barrières mémoire les moins connues et celles que tout le monde devrait connaître ?

5voto

Bo Persson Points 42821

La bibliothèque d'exécution doit implémenter un mutex de manière à ce que le compilateur le sache ! La norme du langage ne dit rien sur la manière de le faire.

Il est probable que cela implique un appel à un service du système d'exploitation qui fonctionne comme une barrière mémoire. Ou le compilateur peut avoir une extension, comme void _ReadWriteBarrier() ;

5voto

Kerrek SB Points 194696

La mise en œuvre effective de votre std::mutex sera telle que le compilateur n'effectuera pas de réordonnancement illégal, n'élidera pas les charges de variables, et s'assurera que la variable de verrouillage est accédée de manière atomique et que le CPU effectue les barrières de mémoire nécessaires pour l'acquisition et la libération du verrouillage.

Les détails de la quantité de travail à effectuer pour garantir cela varient d'une plate-forme à l'autre, mais la mise en œuvre de votre bibliothèque fera ce qu'il faut.

Prograide.com

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.

Powered by:

X