5
當一個線程新建一個不可變的對象,並在第二個線程中共享(比如共享對象的一個字段)時,不應該第二個線程同步?是否需要通過C#中的內存障礙訪問不可變對象?
Thread1:
=========
x = new SomeObject()
Thread2
=========
if (x != null)
x.DoSomething()
x.DoSomething()之前是否應該有內存屏障?是否有可能在第一個線程中對x的賦值對第二個線程永遠不可見? .NET的安全發佈模式是什麼?
好的。 .NET中是否有任何安全的出版物相關信息/文檔? – drr 2011-03-14 20:52:15
我想這取決於你想要做什麼。我將以MSDN上的並行模式庫爲出發點。除此之外,你幾乎只有同步原語。你也可以看看Joe Duffy的網絡日誌。他談到了鎖定和並行數據訪問的更多細節。 – 2011-03-14 21:53:51
我不知道有這樣說的任何文檔,但爲了安全起見,需要在寫入和讀取時使用內存隔離。你可以通過上述幾種方式獲得鎖,volatile,Thread.VolatileRead/Write,顯式調用MemoryBarrier。參見[線程在c#](http://www.albahari.com/threading/part4.aspx#_Memory_Barriers_and_Volatility)瞭解更多信息 – BrandonAGr 2011-03-15 01:13:45