Maison >développement back-end >C++ >Quels types de données sont naturellement atomiques sur un système GNU C/C 64 bits ?

Quels types de données sont naturellement atomiques sur un système GNU C/C 64 bits ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-18 04:00:09798parcourir

Which Data Types Are Naturally Atomic on a 64-Bit GNU C/C   System?

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

Contrairement à C11 et versions ultérieures, ou C 11 et versions ultérieures, qui fournissent garanties pour l'atomicité en utilisant les types _Atomic ou std::atomic, les standards du langage C et C eux-mêmes ne donnent aucune garantie concernant les lectures atomiques et écrit. Au lieu de cela, le niveau d'atomicité dépend de l'implémentation du compilateur et de l'architecture cible.

Sur un ordinateur 64 bits exécutant Linux sur un processeur x86-64, l'atomicité naturelle des différents types de données varie. Les compilateurs GNU C et GNU C (gcc et g ) offrent certains niveaux d'atomicité pour des types spécifiques.

Types atomiques :

  • int : Le typedef _Atomic_word dans l'en-tête indique que int est atomique.
  • __sig_atomic_t : Le typedef dans l'en-tête définit un type entier atomique, garantissant des lectures et écritures atomiques en présence d'interruptions asynchrones.

Types non atomiques :

  • int64_t (long long)
  • uint64_t (long long non signé)
  • double (64 bits)
  • long double (aussi 64 bits)

Remarques supplémentaires :

  • L'atomicité fait référence aux lectures et écritures atomiques, et non à l'incrément, à la décrémentation ou au composé atomique. affectation.
  • Il est important de noter que même si certains types sont garantis atomiques dans certains contextes (par exemple, volatile sig_atomic_t est atomique par rapport aux signaux), ils ne sont pas nécessairement atomiques par rapport aux threads.
  • Le compilateur peut optimiser le code de manière à briser les hypothèses sur l'atomicité, surtout si ces hypothèses ne sont pas explicitement énoncées. dans les standards du langage.
  • Pour garantir un accès simultané sécurisé aux threads, l'utilisation explicite des types _Atomic ou std::atomic est recommandé.

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