2010-05-13 8 views
1

Disons que j'ai variables A, B et C que deux fils (T1, T2) part.
j'ai le code suivant:barrières de mémoire implicite

//T1 
//~~ 

A = 1; 
B = 1; 
C = 1; 

InterlockedExchange(ref Foo, 1); 

//T2 (executes AFTER T1 calls InterlockedExchange) 
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

InterlockedExchange(ref Bar, 1); 

WriteLine(A); 
WriteLine(B); 
WriteLine(C); 

Question:
fait appel InterlockedExchange (Fence pleine implicite) sur T1 et T2, gurentess que T2 sera "Voir" l'écriture faite par T1 avant la clôture? (A, les variables B et C), même si ces variables ne sont pas PLANCE sur la même ligne que cache Foo et Bar ?

Répondre

0

Oui. Une clôture de mémoire n'est pas spécifique à une variable; il entraîne l'achèvement de tous les chargements et magasins émis avant la clôture par le thread appelant. Je peux me tromper, mais je soupçonne que la clôture émise par T2 n'est pas utile - T1 a publié les magasins; la clôture émise par T2 complètera toutes les charges/magasins émis par T2 jusqu'à ce point. Cela ne provoquera pas la visibilité des magasins émis par T1.