Maison >développement back-end >C++ >Quels types C et C présentent un comportement naturellement atomique sur un système x86-64 64 bits ?

Quels types C et C présentent un comportement naturellement atomique sur un système x86-64 64 bits ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-14 07:40:11989parcourir

Which C and C   Types Exhibit Naturally Atomic Behavior on a 64-Bit x86-64 System?

Quels types C et C sont naturellement atomiques sur un ordinateur 64 bits ?

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.

Garanties d'atomicité sur les ordinateurs Linux 64 bits

Sur un Linux 64 bits ordinateur doté d'un processeur x86-64, les types suivants ont naturellement des lectures atomiques et écrit :

  • int
  • _Atomic_word

Cependant, il est important de noter que même ces types ne sont pas définitivement automatiquement atomiques selon les normes du langage.

Comprendre l'atomicité

Il existe deux sens principaux de "atomic":

  • Atomique par rapport aux signaux : garantit que les gestionnaires de signaux invoqués lors de l'exécution de différentes instructions ne verront que l'ancienne ou la nouvelle valeur d'une variable volatile sig_atomic_t.
  • Atomique par rapport aux threads : garantit qu'un accès simultané à un objet entraînera l'affichage d'une valeur correcte par tous les fils. Pour y parvenir, les types _Atomic ou std::atomic sont nécessaires.

Optimisations du compilateur et atomicité

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.

Conclusion

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn