Maison >développement back-end >C++ >Les normes C/C garantissent-elles les opérations atomiques pour tout type de données sur les architectures ARM et x86-64 ?

Les normes C/C garantissent-elles les opérations atomiques pour tout type de données sur les architectures ARM et x86-64 ?

DDD
DDDoriginal
2024-12-15 14:29:31444parcourir

Do C/C   Standards Guarantee Atomic Operations for Any Data Type on ARM and x86-64 Architectures?

ARM et x86-64 : aucun type atomique garanti

Contrairement à l'hypothèse initiale, les standards du langage C/C n'offrent aucune garantie de opérations atomiques pour tout type de données spécifique, même sur des ordinateurs 64 bits.

Accès atomique via Signaux vs Threads

Il est crucial de distinguer deux notions d'atomicité :

  • Atomique par rapport aux signaux : Assure la sécurité du signal, permettant une correction lit la valeur mise à jour après une interruption de signal dans le même thread.
  • Atomique par rapport à threads : Assure la cohérence des données sur plusieurs threads, empêchant ainsi la corruption lors d'un accès simultané.

Implémentations de GCC sur ARM et x86-64

Bien que moderne Les processeurs comme ARMv8 et x86-64 peuvent garantir un accès atomique pour certaines opérations, ces garanties ne se reflètent pas au niveau du langage. GCC et d'autres compilateurs peuvent optimiser le code de manière à violer ces atomicités au niveau matériel, comme le démontre l'exemple suivant :

volatile uint32_t x;

uint32_t foo(void) {
    return (x >> 8) & 0xffff;
}

Même si x est une variable de 32 bits, GCC compile foo en deux 16 distincts. -chargements de bits, ce qui pourrait entraîner une lecture non atomique si x est modifié simultanément.

Dépendance à std::atomic ou _Atomic

La seule façon de garantir les opérations atomiques en C et C est d'utiliser explicitement les types std::atomic (C ) ou _Atomic (C), qui fournissent les mécanismes de synchronisation nécessaires pour garantir le thread -accès sécurisé.

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