Contrairement aux standards de langage, les compilateurs GNU C et GNU C traitent l'atomicité en fonction d'architectures spécifiques. Alors que C11 et C 11 introduisent les types _Atomic et std::atomic<> types respectivement, cet article se concentre uniquement sur les lectures et écritures naturellement atomiques, à l'exclusion de l'incrémentation, de la décrémentation ou de l'affectation composée.
Sur un Linux 64 bits ordinateur doté d'un processeur x86-64, les types suivants ont naturellement des lectures atomiques et écrit :
Cependant, il est important de noter que même ces types ne sont pas définitivement automatiquement atomiques selon les normes du langage.
Il existe deux sens principaux de "atomic":
Ce n'est pas parce qu'un type est naturellement atomique au niveau matériel que le compilateur utilisera toujours des instructions atomiques pour y accéder. Les optimisations peuvent conduire à un accès non atomique, même pour les types de données connus pour être atomiques sur le matériel cible.
Par exemple, une charge à partir d'un entier 32 bits sur x86 est atomique, mais un compilateur peut utilisez un chargement partiel ou un magasin 16 bits dont il n'est pas garanti qu'il soit atomique.
En résumé, il existe pas de types en C ou C qui soient définitivement automatiquement atomiques sur un ordinateur 64 bits. Pour garantir l'accès atomique, il est crucial d'utiliser les types _Atomic ou std::atomic ou de s'appuyer sur la documentation pour vérifier les garanties atomiques pour des architectures et des compilateurs spécifiques.
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!