Nous savons par le C# specification que les références lecture/écriture sont atomiques. Dans une déclaration qui accède à un membre d'un objet, la référence sera-t-elle également accessible de manière atomique? Je pense que oui car c'est aussi une sorte de lecture de référence implicite que le compilateur doit fournir pour l'atomicité tout en générant du code pour celui-ci.Accès aux membres de l'objet et à l'atomicité
Dans la même instruction, l'accès à l'objet pour accéder à son membre provoquera la référence des objets conservés afin qu'il ne soit pas collecté lorsque une nouvelle instance est créée par un autre thread? Ainsi, si nous accédons aux membres d'une chaîne, la référence des objets les plus à gauche sera-t-elle également conservée afin qu'elle ne soit pas collectée par d'autres threads?
Considérons le code suivant;
static SomeClass sharedVar;
void someMethod()
{
SomeClass someLocalVar = sharedVar.memberX.memberY.a;
operations on someLocalVar...
}
Je cherche l'explication officielle sur le sujet, de MSDN library spécifications C#, etc. ou les gens de Microsoft pour vous assurer que je ne suis pas casser quelque chose et tout va bien.
2. Je veux dire que si un autre thread affecte une nouvelle instance à sharedVar, l'ancienne référence est alors éliminée alors que celle-ci accède à sharedVar. 3. Je veux dire quand un point pendant qu'un thread exécute les instructions pour l'instruction SomeClass someLocalVar = sharedVar.memberX.memberY.a; et quand memberY est lu, un autre thread entre en action et assigne null ou nouvel objet à sharedVar. Je ne pense pas que la référence sera tranchée, mais j'hésite et je veux m'assurer avec des documents officiels, des explications? merci. – lockedscope