集合都继承ICollection====,
集合内部都有一个占用内存真实存放元素的底层容器,然后集合再提供一些操作此内部容器的API。假设我们想让这些API线程安全的访问容器,会定义一个object实例结合lock封装这些外围API。为了性能,不可能让容器都天生线程安全,但是集合都实现ICollection接口,此接口规定集合内部有个SyncRoot引用实例。这样我们再想线程安全的访问容器时,先调用lock(SyncRoot)即可。每个集合都拥有自己的SyncRoot,且与集合捆绑在一起,加锁时不会锁错作为锁的引用实例。
ICollection myCollection = someCollection;
lock(myCollection.SyncRoot)
{
// Some operation on the collection, which is now thread safe.
}
ICollection myCollection = someCollection;
lock(myCollection.SyncRoot)
{
foreach (object item in myCollection)
{
// Insert your code here.
}
}
标签:容器,SyncRoot,lock,ICollection,myCollection,集合
From: https://www.cnblogs.com/LiuwayLi/p/17606425.html