在.NET中進行雙重檢查鎖定我在本文中討論了為什么在Java中打破了雙重檢查鎖定范例的原因。如果聲明變量,范例是否對.NET(特別是C#)有效volatile?
3 回答

qq_花開花謝_0
TA貢獻1835條經(jīng)驗 獲得超7個贊
在C#中實現(xiàn)Singleton模式在第三個版本中討論了這個問題。
它說:
使實例變量volatile可以使其工作,顯式內(nèi)存屏障調(diào)用也是如此,盡管在后一種情況下甚至專家也無法準確地同意需要哪些障礙。我傾向于避免專家不同意什么是對的,哪些是錯的!
作者似乎暗示雙重鎖定比其他策略更不可能工作,因此不應(yīng)該使用。

慕碼人8056858
TA貢獻1803條經(jīng)驗 獲得超6個贊
現(xiàn)在,雙重檢查鎖定在Java和C#中工作(Java內(nèi)存模型已更改,這是其中一種效果)。但是,你必須完全正確。如果你稍微搞砸了,你最終可能會失去線程的安全性。
正如其他答案所述,如果您正在實施單例模式,那么有更好的方法可以實現(xiàn)它。就個人而言,如果我處于需要在雙重檢查鎖定和“每次鎖定”代碼之間做出選擇的情況,我每次都要鎖定,直到我得到真正的證據(jù)表明它導(dǎo)致了瓶頸。說到線程,一個簡單而明顯正確的模式是值得的。
- 3 回答
- 0 關(guān)注
- 659 瀏覽
添加回答
舉報
0/150
提交
取消