Maison >développement back-end >C++ >Les lectures et écritures d'entiers C sont-elles atomiques dans les environnements multithread ?

Les lectures et écritures d'entiers C sont-elles atomiques dans les environnements multithread ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-02 12:02:11749parcourir

Are C   Integer Reads and Writes Atomic in Multithreaded Environments?

Les lectures et écritures C d'un Int sont-elles atomiques ? [doublon]

Question :

Dans une application multithread avec un thread mettant à jour et un autre lisant un entier, est-il nécessaire de synchroniser l'accès à ce valeur multi-octets ? Une écriture partielle peut-elle être interrompue avant la fin, permettant à une lecture de capturer une valeur incomplète ?

Réponse :

L'atomicité des lectures et des écritures d'un entier en C dépend sur l'architecture du système.

Détails :

  • Sur les systèmes IA32 : Les adresses correctement alignées auront des lectures et des écritures atomiques. Les écritures non alignées peuvent être atomiques en fonction du cache.
  • Mise en cache : Si la mémoire se trouve dans une seule ligne de cache L1, les écritures sont atomiques. Sinon, ils ne le seront peut-être pas.
  • Largeur du bus : La largeur du bus de données affecte l'atomicité. Sur certains systèmes plus anciens, les écritures 16 bits vers des adresses non alignées n'étaient pas atomiques, alors que sur les systèmes avec des bus plus larges, elles l'étaient.
  • Optimisations du compilateur : En C/C, il est important de marquer la valeur partagée comme volatile pour empêcher l'optimiseur de supposer qu'elle n'est jamais mise à jour en un seul fil.

Conclusion :

La nécessité d'une synchronisation dépend de facteurs tels que l'architecture du processeur, la disposition de la mémoire et les optimisations du compilateur. De manière générale, il est recommandé de synchroniser l'accès aux valeurs multi-octets partagées, notamment dans les sections critiques où l'ordre des lectures et des écritures est pertinent.

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