Maison > Article > développement back-end > Pourquoi « std :: atomic » utilise-t-il « XCHG » pour les magasins séquentiellement cohérents ?
Dans le domaine du multithreading, la classe std::atomic fournit un des moyens pour un accès simultané aux données partagées entre les threads tout en garantissant l'intégrité des données. Sa fonction membre de magasin permet d'écrire des valeurs dans une variable atomique avec une sémantique d'ordre de mémoire spécifiée.
Dans le cas d'une cohérence séquentielle (std::memory_order_seq_cst), les architectures x86 utilisent une instruction xchg pour implémenter des magasins atomiques. Cette instruction effectue un échange simultané de valeurs plutôt qu'une simple opération de stockage.
Bien qu'il puisse sembler qu'une instruction de stockage simple couplée à une barrière de mémoire (par exemple, _ReadWriteBarrier() ou asm volatile("" ::: "memory");) suffirait pour la cohérence séquentielle, l'utilisation de xchg a plusieurs avantages :
1. Barrière de mémoire complète : xchg agit comme une barrière de mémoire complète sur x86 en raison de son préfixe de verrouillage implicite. Cela garantit que toutes les opérations de mémoire avant et après xchg sont ordonnées, empêchant ainsi la réorganisation de la mémoire.
2. La sémantique de version est insuffisante : Une opération de magasin normale sur x86 présente une sémantique de version, qui permet une réorganisation avec les opérations ultérieures, y compris l'acquisition de charges. La cohérence séquentielle, en revanche, exige qu'une telle réorganisation soit interdite.
Le choix entre xchg et mov mfence pour les magasins atomiques a des implications sur les performances :
Outre l'utilisation de xchg pour les magasins atomiques, d'autres options pour implémenter des clôtures de threads atomiques (également avec l'ordre de mémoire seq_cst) incluent :
Il est important de noter que :
En résumé, les magasins std::atomic avec cohérence séquentielle sur les architectures x86 utilisent xchg en raison de son effet de barrière mémoire complète et de sa compatibilité avec les exigences. de cohérence séquentielle. Bien que des implémentations alternatives existent, xchg reste une solution largement adoptée pour son efficacité et sa conformité aux recommandations de l'industrie.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!