我不確定鎖是如何工作的。
如果我有List<T> list
和2個線程會發生什麼?
這在線程開始第一跑步和枚舉列表如果我鎖定一個對象而另一個線程使用該變量會發生什麼?
foreach(T t in list)
{
// code
}
,並在同一時間,但線程1開始後,線程2將鎖定列表
lock(list)
{
// code
}
我用ThreadPool
做一些會發生什麼處理和我需要知道如何鎖真正的工作,如果線程安全
ThreadPool.QueueUserWorkItem(new WaitCallback(method), obj);
當我有兩種方法時,情況如何呢? AddValue和GetValue?我在兩種方法中都使用lock(someObj){}。但是我聽說過當一個線程在另一個線程調用GetValue的同時調用AddValue時的情況 - 集合將被修改並拋出異常。同步對象是否保證在其lock()構造中使用它的所有方法也將被阻止?換句話說,我需要在閱讀時屏蔽所有的寫操作......這對我來說並不明確...... – Laserson 2011-09-02 15:54:04
@Laserson是使用來自***所有***來電者的鎖將停止這是一個問題。在大多數情況下,排他性的短暫時期不是問題,但是如果讀取線程多於寫入線程,請查看ReaderWriterLockSlim,它允許一個寫入程序** NAND **多個讀取程序 – 2011-09-02 16:08:33