2010-05-13 76 views
1

比方說,我有兩個線程(T1,T2)共享的變量A,B和C.
我有以下代碼:隱式內存障礙

//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); 

問:
確實在T1和T2調用InterlockedExchange(隱式全柵欄),gurentess是T2將 「看」 柵欄前通過T1完成寫? (A,B和C變量),儘管這些變量不在FooBar

回答

0

是的。內存圍欄不是特定於變量的;它會導致完成調用線程在fence之前發佈的所有加載和存儲。

我可能是錯的,但我懷疑T2發佈的圍欄沒有用 - T1已經發布了商店;由T2發佈的圍欄將完成T2發佈的任何裝載/存儲。這不會導致T1發佈的商店的可視性。