我有一個List集合,我想在一個多線程應用程序中迭代它。每次迭代時我都需要保護它,因爲它可能會被更改,並且我不希望「收集被修改」異常,當我做一個foreach時。Lock與ToArray爲線程安全foreach訪問List集合
這樣做的正確方法是什麼?
每次訪問或循環時都使用鎖定。我很害怕僵局。也許我只是使用鎖的偏執,不應該。我需要知道我是否走這條路線以避免死鎖?鎖是否相當有效?使用列表<> .ToArray()在每次執行foreach時都複製到數組。這會導致性能下降,但很容易。我擔心內存抖動以及複製它的時間。看起來過度。使用ToArray是否安全?
不要使用foreach而是使用for循環代替。每次我這樣做以確保列表不縮小時,我是不是需要進行長度檢查?這似乎很煩人。
列出可能是最線程安全的數據結構有! – Egon 2010-06-29 01:12:57
您可以使用[CHESS - 自動化併發測試工具](http://research.microsoft.com/en-us/projects/chess/)和[MSDN](http://channel9.msdn)測試您的假設。 com/shows/Going + Deep/CHESS-An-Automated-Concurrency-Testing-Tool /) – 2010-06-29 01:23:25