C# Etats spécifications dans la section 5.5 qui lit et écrit sur certains types (à savoir bool
, char
, byte
, sbyte
, short
, ushort
, uint
, int
, float
et types référence) sont garantis atomique.Comment C# garantit-il l'atomicité des opérations de lecture/écriture?
Cela a piqué mon intérêt. Comment peux-tu faire ça? Je veux dire, mon humble expérience personnelle m'a seulement montré de verrouiller des variables ou d'utiliser des barrières si je voulais que les lectures et les écritures soient atomiques; ce serait un tueur de performance si cela devait être fait pour chaque lecture/écriture. Et pourtant C# fait quelque chose avec un effet similaire. Peut-être que d'autres langages (comme Java) le font. Je ne sais pas sérieusement. Ma question n'est pas vraiment destinée à être spécifique à une langue, c'est juste que je sais que C# le fait. Je comprends qu'il pourrait avoir à traiter certaines instructions spécifiques du processeur, et ne pas être utilisable en C/C++. Cependant, j'aimerais toujours savoir comment cela fonctionne. Pour dire la vérité, je croyais que les lectures et les écritures pouvaient être non-atomiques dans certaines conditions, comme une CPU pourrait accéder à un emplacement mémoire alors qu'une autre CPU y écrit. Cela se produit-il uniquement lorsque le processeur ne peut pas traiter tout l'objet en même temps, par exemple parce qu'il est trop grand ou parce que la mémoire n'est pas alignée sur la limite correcte?
Pour moi, cela semble clair et direct. – Dykam
Meh. Je pensais d'une manière ou d'une autre qu'il était possible pour un autre thread d'accéder à un emplacement de mémoire _durant_ l'opération d'écriture d'un autre processeur, conduisant à des résultats incohérents. Avais-je tort tout ce temps? – zneak
Il y a beaucoup d'autres problèmes que la lecture/écriture atomique. 2 threads opérant sur les mêmes variables peuvent très bien conduire à des résultats non désirés car ils lisent/modifient/écrivent souvent ce qui n'est pas atomique. Il y a aussi des problèmes de visibilité de la mémoire sur les machines multiprocesseurs qui nécessitent un soin particulier. – nos