2011-11-20 36 views
2

我已在Visual Studio項目中創建了應用程序設置,其中包含用戶範圍設置和應用程序範圍設置。我的應用程序有幾個線程可以同時訪問設置以進行讀取或寫入。我搜索了MSDN,看是否可以在運行時更新的用戶範圍設置是線程安全的,但無法找到明確的答案。有人知道嗎?用戶範圍的應用程序設置(在VS設計器中創建)是否安全?

在此先感謝!

+0

這取決於你在這裏所說的線程安全。在以下場景中它們不是線程安全的:'int current = Settings.Default.SomeIndex;當前++; Settings.Default.SomeIndex = current; Settings.Default.Save();' –

回答

0

由Visual Studio應用程序設置設計器生成的包裝是一個索引,將得到和在一個線程安全的方式設置應用程序設置的屬性同步單。

3

線程安全不僅僅是「這會損壞數據結構」。

在設置環境中,您需要考慮三個不同的含義。其中一個設置數據結構是安全的,但其他兩個不是。

  1. 設置和讀取單個值
  2. 設置,並在同一時間讀取多個值,獲取或設置一致的畫面
  3. 通過其電流值來計算設置回之前的新的調整值

在第一種情況下,是的,設置數據結構是線程安全的。您將無法在設置中寫入半Int64,並冒着另一個線程觀察該中間值的風險。

但是,如果你按順序設置多個值,你不能保證其他線程不能兩個這樣的設置語句之間讀取所有的設置,觀察一個變化,而不是其他。

換句話說,你可以有這樣的場景:

Thread 1      Thread 2 
set setting 1 
           read setting 1 
           read setting 2 
set setting 2 

而且在讀值,計算從你讀值的新值,並設置回的情況下,也不能保證其他在此期間線程不能做同樣的事情(即改變當前值)。

像這樣:

Thread 1      Thread 2 
read setting 1 
           read setting 1 
           calculate new value 
           write setting 1 
calculate new value 
write setting 1 

對於後兩種情況下,你需要一個外部同步對象可以鎖定,以確保你沒有得到中途改變,或失去的變化,但後來所有的代碼以這種方式訪問​​設置將需要鎖定該對象。

+0

我只有第一個場景:) – user1039580

相關問題