2013-12-11 126 views
1

我擁有的集合對象是一個單例類型,它包含特定對象的列表,列表中的每個索引都被多個線程讀取,以便他們可以查詢線程局部變量要使用的整型屬性值。在我看來,這種情況是否需要使用同步的任何安全措施,但發佈的問題要加倍確定。對象只被多個線程讀取,是否需要同步

沒有更新發生在多線程上面提到的對象,他們只是閱讀。在我看來,即使ReaderWriterLockSlim不需要在這裏使用,因爲沒有寫入。請確認我的理解。

代碼是一樣的東西:

這裏NumOfLocs,threadProp特定於線程和收集數量和對象不改變,而線程讀取,他們只是在初始化過程中固定在開始

int NumOfLocs = collectionObject.LocCollection.Count; 

int threadProp = collectionObject.LocCollection[index].Prop 
+0

如果您只是閱讀(如果您不會在閱讀時更改它),那麼不需要 – qwr

+0

因此,當您的程序加載時只需創建一次該數據,然後從該數據結構中讀取數據呢? – Ikaso

+0

LocCollection是什麼類型? FCL集合(位於'System.Collections'和'System.Collections.Generic')對於讀取是線程安全的。 – Dennis

回答

1

如果您只是閱讀集合,則不需要同步。但是,如果您想更新集合,則可以使用System.Collections.Concurrent中提供的線程安全集合類的列表。 See here獲取MSDN文檔。

+0

對於每個*集合都可以實現,這不是真的。當然,這*應該是*真實的。 – Dennis

+0

當然不是,但它確實涵蓋了非專業收藏 – Mark

1

通常用於讀取狀態的函數不會改變狀態。但有時某些對象的某些功能會改變一些內部對象的狀態,與常識相反。例如,如果對象正在緩存某些內容或重新安排內部結構,則可能會發生這種情況。無法知道某個對象在其任何函數中的作用,而不知道該對象的內部運作情況。

如果它是標準的.NET對象,那麼可能會有一個文檔,它會告訴你該對象是否是線程安全的讀取。如果它是一些第三方對象,那麼你必須問那個第三方。如果你編碼的對象只有你知道。

+2

請解釋downvotes。我看到答案沒有錯。 – Dialecticus

相關問題