Je viens de me poser la question suivante: l'accès d'un objet est-il possible en toute sécurité à travers les threads en C#?Atomicité des références d'objet
E.g. avec le code
//Somewhere long ago
MyClass myVar = new MyClass("First Instance");
//Then later, happening at the same time
//In thread one
myVar = new MyClass("Second Instance");
//In thread two
myVar.PrintName();
Je ne se soucient pas de savoir si la première ou la deuxième instance est utilisée, mais est-il possible que myVar est à un moment pas valable du tout (par exemple, pointant vers un emplacement non existant, peut-être parce que la référence d'objet est que partiellement mis à jour avant utilisé dans l'autre thread)
question latérale sur les verrous:
Si je laisse un verrou - sont alors toutes les écritures en cours confiée à la mémoire?
Ma question ici est si je référence une variable dans un verrou, je sais qu'un seul thread peut accéder au verrou en même temps - mais peut-il arriver que j'écris à la variable dans un thread (et l'écriture est seulement fait au cache), et après que dans l'autre thread même à l'intérieur du verrou obtenir l'ancienne valeur de la variable (parce que le cache n'est pas engagé ou j'ai toujours une ancienne valeur dans le cache de ce thread)?
Oui, je voulais dire les caches CPU - donc le code à l'intérieur des zones de verrouillage sont assurés d'être "cache nettoyer"? – Fionn
Tout le code est "cache clean" c'est juste pas quelque chose dont nous devons nous inquiéter, c'est un problème matériel;). Il n'y a pas de situations dans lesquelles le codage thread-safe peut nécessiter un travail supplémentaire pour rendre le cache propre. Le code OTH thread-unsafe est dangereux même avec un seul processeur/cache. – AnthonyWJones