Cette question explore la création d'un compteur atomique 64 bits à partir d'entiers atomiques 32 bits. Le compteur a un seul écrivain et plusieurs lecteurs, l'écrivain étant un gestionnaire de signal qui ne doit pas bloquer.
La solution proposée utilise un décompte de générations, utilisant le bit faible comme verrou de lecture. Les lecteurs réessayent jusqu'à ce que le nombre de générations soit stable tout au long de la lecture et que le bit faible ne soit pas défini.
Le code fourni suit généralement les principes de conception corrects d'un SeqLock, un modèle pour implémenter des compteurs atomiques sans verrouillage avec des numéros de séquence. L'utilisation de l'ordre de la mémoire est judicieuse, garantissant que le compteur est mis à jour de manière atomique.
Cependant, il convient de noter que l'utilisation d'opérations RMW atomiques pour l'incrément de la charge utile est inutile si le Le système prend en charge l'ajout ou la charge atomique 64 bits moins cher. Au lieu de cela, un simple chargement des deux moitiés, suivi d'un incrément non atomique et d'un stockage atomique du résultat est suffisant.
De plus, le compteur de séquence peut également éviter les opérations RMW atomiques à moins qu'il ne soit utilisé comme verrou tournant avec plusieurs écrivains. Avec un seul écrivain, il peut utiliser des charges pures et des magasins purs avec commande de versions, qui sont plus efficaces que le RMW atomique ou les magasins avec commande seq_cst.
Pour contourner les limitations de atomique
Une autre alternative serait d'implémenter un modèle SeqLock qui vérifie dynamiquement si la cible prend en charge les opérations atomiques sans verrouillage sur atomique
En conclusion, alors que le code fourni présente une implémentation fonctionnelle d'un compteur atomique 64 bits utilisant des atomes 32 bits, il sont des optimisations et des alternatives potentielles qui pourraient améliorer les performances et simplifier le code.
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!