Le C++11 norme définit un modèle de mémoire (1.7, 1.10) qui contient la mémoire des ordonnancements, qui sont, en gros, "de manière séquentielle-compatible", "acquérir", "consommer", "libération", et "relax". Également à peu près, un programme est correct que si c'est de la course libre, ce qui se produit si toutes les actions peuvent être mis dans l'ordre dans lequel l'action se passe-avant un autre. La façon dont une action X-passe-avant une action Y est que soit X est séquencée avant de Y (dans un thread), ou X inter-thread-de-passe-avant d'Y. La dernière condition est donnée, entre autres, lors de l'
- X se synchronise avec Y, ou
- X est la dépendance-commandé avant d' Y.
La synchronisation avec advient-il lorsque X est un atomique magasin avec la "libération" de la commande sur certains variable atomique, et Y est atomique de charge avec "acquérir" de la commande sur la même variable. En cours de dépendance-commandé-avant de passe pour la situation analogue où Y est la charge avec "consommer" de la commande (et un accès à la mémoire). La notion de synchronise avec s'étend le passe-avant de manière transitive de la relation à travers des actions séquencé-devant l'un de l'autre dans un thread, mais le fait de la dépendance-commandé-avant est élargie de manière transitive uniquement par l'intermédiaire d'un sous-ensemble strict de séquencé-devant appelé porte-dépendance, qui suit un largish ensemble de règles, et notamment peut être interrompue par l' std::kill_dependency
.
Alors, quel est le but de la notion de "dépendance de commande"? Quels sont les avantages d'elle au cours de la plus simple séquencé-avant / synchronise avec la commande? Étant donné que les règles sont plus strictes, je suppose que peut être mis en œuvre de manière plus efficace.
Pouvez-vous donner un exemple d'un programme où la commutation de la sortie/acquisition de la libération/consommer est à la fois correct et fournit un non-trivial avantage? Et quand souhaitez - std::kill_dependency
fournir une amélioration? De haut niveau, les arguments de la être gentil, mais des points de bonus pour le matériel de différences spécifiques.