Ce n'chaque memory_order veux dire?

J'ai lu un chapitre et je ne l'aime pas beaucoup. Je ne suis toujours pas clair quelles sont les différences entre chaque mémoire de l'ordre. C'est mon actuel de la spéculation qui j'ai compris après la lecture de beaucoup plus simple http://en.cppreference.com/w/cpp/atomic/memory_order

Le ci-dessous est faux, alors n'essayez pas d'apprendre

  • memory_order_relaxed: Ne se synchronise pas, mais n'est pas ignorée lors de la commande est effectué à partir d'un autre mode dans un autre atomique var
  • memory_order_consume: Synchronise la lecture de cette variable atomique cependant Il ne marche pas de synchronisation détendu vars écrit avant cette. Toutefois, si le thread utilise var X lors de la modification de Y (et la lance). Les autres threads consommant Y voir X publié aussi bien? Je ne sais pas si cela signifie que ce thread pousse les changements de x (et évidemment y)
  • memory_order_acquire: Synchronise la lecture de cette variable atomique ET permet de s'assurer détendu vars écrit avant ce sont synchronisés ainsi. (est-ce à dire tous atomique variables sur tous les threads sont synchronisés?)
  • memory_order_release: Pousse la atomique en magasin pour les autres threads (mais seulement si ils ont lu le var à consommer/acquisition)
  • memory_order_acq_rel: lecture/écriture de la fpo. Un acquérir de sorte que vous n'avez pas à modifier une ancienne valeur et libère les modifications.
  • memory_order_seq_cst: La même chose que d'acquérir communiqué que les mises à jour pour être vu dans d'autres threads (si a magasin avec détendue sur un autre thread. J'magasin b avec seq_cst. Un 3ème fil de la lecture a avec détendez-vous verrez des changements avec b et toute autre variable atomique?).

Je crois que j'ai compris, mais corrigez-moi si je me trompe. Je ne pouvais pas trouver quelque chose qui l'explique dans un format facile à lire l'anglais.

  • J'ai lu le premier, qui n'a pas beaucoup d'aide. Le 2ème n'est même pas lié.
  • Je doute que cela ne sera jamais "facile à lire". La mémoire de la commande est juste en soi un très compliquée et très subtile sujet. Je ne vais pas tenter de l'expliquer mieux que ce document.
  • le problème de ce document (ou de hpl.hp.com/techreports/Compaq-DEC/WRL-95-7.pdf qui est une autre bonne introduction aux questions), c'est que leur terminologie n'est pas en ligne avec celle utilisée dans la norme.
  • Je pense acquérir afin impose une lecture de la barrière avant de la charge, et l'ordre de sortie impose une barrière d'écriture après le magasin... d'Acquérir de commande empêche la descente de la charge, et la libération empêche la remontée de la boutique.
  • correct, je ne pense pas que cette phrase est difficile à comprendre. Maintenant, si vous pouvez expliquer comment memory_order_seq_cst est différente de memory_order_acq_rel je serais heureux 😉
  • acqrel signifie "acquérir pour les charges, libération pour les magasins" (par exemple, pour comparer-échange, où vous obtenez soit une charge ou d'un magasin, selon que la valeur attendue est toujours d'actualité). Séquentielle cohérence implique une inconditionnelle de plein barrière.
  • Il y a un total de la commande. Voir stackoverflow.com/questions/12340773/... pour les cas où des questions.
  • Je pense que le C++ modèle est plus faible que celle (c'est à dire que vous pouvez y arriver de cette façon mais il y a des choses qui sont autorisés en C++ qui ne peut pas se produire avec l'utilisation du noyau Linux, obstacles). Mais pour confirmer que j'aurais du relire attentivement les définitions du noyau Linux, les obstacles.
  • Le GCC Wiki explique beaucoup mieux, à mon avis.
  • C'est la meilleure explication que j'ai jamais vu. Je souhaite que j'ai vu avant
  • Envisagez-vous de faire votre commentaire une réponse? La raison en est que votre commentaire fournit de l'information utile à quelqu'un (comme moi) qui trouve plus tard la question de Stackoverflow des archives. (Aussi, si vous répondez ici, alors que je suis informé, je vais upvote la réponse.)
  • Ajout d'un extrait, voir ci-dessous.

InformationsquelleAutor | 2012-09-10