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 ?
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é :
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!