天天看點

C#-多線程資料同步容易出現的異常問題

當多個線程同時并發讀寫資料庫的時候會抛出異常,這是比較典型的多線程并發同步所帶來的問題,因為集合在讀的過程中是不容許我們修改的,是以就需要引入鎖的概念,加上讀寫鎖就不會出現問題。

集合類通常不是線程安全的,多個閱讀器可以安全的讀取集合.但是對集合的任何修改都将為通路集合的所有線程生成不明确的結果.使用以下任何方法都可以令集合類是線程安全的

(1) 使用Synchronized 方法,則從該類派生包裝,并通過該包裝以獨占方式通路集合

(2) 如果該類沒有Synchronized 方法,則從該類派生并使用SyncRoot屬性實作Synchronized 方法.

(3) 在通路該集合時對SyncRoot屬性使用鎖定機制

這一段時間在公司做多線程的東西比較多,是以把一些心得寫了下來,對關注這一塊的朋友有個提示作用.

大家可以看看以下代碼:

這個測試程式得簡單,大家一看就明白了你可以運作一下看看,程式一會就挂了,揭示異常:未處理的異常: System.ArgumentOutOfRangeException: 索引超出範圍。必須為非負值并小于集合大小。

這就是因為多線程中對共享的集合資源同步引起的

下面是改後的代碼: