3 回答

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

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