目前我盡力改善我的記憶障礙,鎖和存儲模型的理解。記憶障礙和鬆散內存模型
據我所知,存在四種不同類型的鬆弛,寫入 - >讀取,寫入 - >寫入,讀取 - >寫入和讀取 - >讀取。 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的值提前。
是我的看法是否正確?