我的應用程序有線程問題。關於集合的多線程問題
由於線程問題經常發生,它不會一直髮生。 對這個代碼有時發生collectionChanged異常:
SyncLock _padLock
System.Threading.Monitor.Enter(serie)
For Each dat In serie.Lignes
WriteLine(dat.Columns(), False, 0, False)'exception here
Next
System.Threading.Monitor.Exit(serie)
End SyncLock
基本上是一個系列包含的行,這是對象的陣列。
爲什麼另一個線程能夠修改系列,如果我在該對象上有一個監視器鎖?
此外,我似乎無法看到部分被鎖定在VS.有沒有特定的方式?
編輯:
我修改了代碼,以便正確完成鎖定。該錯誤消失了。但現在我試圖找出另一個錯誤即時通訊。 這是一個非常棘手的問題,因爲有時我會得到意想不到的結果(高度歸因於種族),但是當我在代碼中有斷點時,我無法再現它。
這是一個非常多毛的情況。
是否正在調試集合的代碼也是同步的? (例如,它是否使用相同的對象進行鎖定?) – 2012-03-20 11:41:13
不,修改集合的代碼不是同步的。但是,如果我鎖定對象,只有一個線程應該被允許訪問它? – squelos 2012-03-20 12:54:58
@squelos - 鎖不保護* object *,它會投影*代碼塊*。因此,您需要將每個可修改「serie」或「serie.Lignes」的代碼塊封裝在同一個對象*中。 – 2012-03-20 13:27:41