Dans son exposé sur les "armes atomiques<>" , Herb Sutter montre un exemple dans lequel un thread principal définit un indicateur d'arrêt à l'aide de memory_order_seq_cst et plusieurs threads de travail vérifient l'indicateur à l'aide de memory_order_relaxed. Sutter explique que l'utilisation de memory_order_relaxed pour la vérification est acceptable en raison de l'impact négligeable sur la latence. Cependant, il suggère d'utiliser memory_order_seq_cst pour l'opération qui définit l'indicateur, sans fournir de raison spécifique.
Comprendre le concept d'ordre de la mémoire est ici crucial. Les ordres de mémoire définissent les garanties de visibilité et de synchronisation fournies par les opérations atomiques. Dans cet exemple, l'utilisation de memory_order_seq_cst pour définir l'indicateur garantit ce qui suit :
Bien que l'utilisation de memory_order_seq_cst pour l'opération d'écriture puisse sembler excessive étant donné que l'opération de chargement utilise memory_order_relaxed, elle a en fait aucune implication significative en termes de performances. Les implémentations sont nécessaires pour rendre les magasins atomiques visibles dans un délai raisonnable, quel que soit l'ordre de la mémoire utilisé.
Bien que l'impact sur la latence de l'utilisation de memory_order_seq_cst pour l'opération d'écriture soit minime , il offre plusieurs avantages :
En conclusion, utiliser memory_order_seq_cst pour définir l'arrêt L'indicateur dans cet exemple n'est pas destiné à l'optimisation des performances mais à garantir l'exactitude et la sécurité des threads. Bien que memory_order_relaxed soit acceptable pour l'opération de chargement, l'utilisation de memory_order_seq_cst pour l'opération d'écriture offre des garanties supplémentaires sans compromettre les performances.
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!