2011-08-22 65 views
0

目前我盡力改善我的記憶障礙,鎖和存儲模型的理解。記憶障礙和鬆散內存模型

據我所知,存在四種不同類型的鬆弛,寫入 - >讀取,寫入 - >寫入,讀取 - >寫入和讀取 - >讀取。 X86處理器僅允許直寫>閱讀放鬆這通常被稱爲總存儲順序(TSO)。 部分商店訂單(PSO)允許進一步直寫>寫放寬和放鬆的商店訂單(RSO) 允許所有上述放寬。

此外存在三種類型的內存障礙:釋放,獲取和兩個在一起。 鎖可以使用只是獲得和釋放障礙或有時完全障礙(.Net)。

現在考慮下面的例子:

// thread 0 
x = 1 
flag = 1 

//thread 1 
while (flag != 1); 
print x 

我目前的理解告訴我,我不需要額外的記憶障礙,如果我 TSO機器上運行此代碼。 如果是PSO機器,我需要x = 1和flag = 1之間的釋放屏障來確保 線程1在flag = 1時獲取x的實際值。 如果是RSO機I還需要同時之間的獲取屏障(!標誌= 1);並打印x以防止 線程1讀取x的值提前。

是我的看法是否正確?

回答

0

我想你的代碼示例是接近一個在這個question

,對於RSO說你需要比你的描述,更具體,例如一個規定,而之前線程1新鮮感保證更多的內存障礙。

我不確定TSO和PSO的一部分,希望這會有所幫助,因爲我也想明白這個問題,內存屏障和一些相關的人