Jon*_*Jon 12 .net c# multithreading .net-4.0
如果我有
Dictionary<int, StreamReader> myDic = new Dictionary<int, StreamReader>
//Populate dictionary
Run Code Online (Sandbox Code Playgroud)
一个线程呢
myDic[0] = new StreamReader(path);
Run Code Online (Sandbox Code Playgroud)
另一个线程呢
myDic[1] = new StreamReader(otherpath)
Run Code Online (Sandbox Code Playgroud)
这个线程是否安全,因为字典中的实际项目被修改与另一个线程上的实际项目不同,或者我会得到一个 InvalidOperationException: Collection was modified
SLa*_*aks 18
你将只能得到InvalidOperationException: Collection was modified
,如果你列举的词典,而修改.
但是,这不是线程安全的.
如果其中一个操作导致字典调整大小,则另一个操作可能会丢失.
相反,使用ConcurrentDictionary
.
如果从多个线程读取,System.Collections.Generic集合只是线程安全的.
引自MSDN
System.Collections.Generic集合类不提供任何线程同步; 用户代码必须在多个线程上同时添加或删除项目时提供所有同步
如果您希望读取和写入操作都需要线程安全,请考虑使用System.Collections.Concurrent
*当您编写新代码时,只要集合将同时写入多个线程,就使用并发集合类.*