首页 > 其他分享 >SyncRoot

SyncRoot

时间:2023-08-04 16:56:18浏览次数:18  
标签:容器 SyncRoot lock ICollection myCollection 集合

集合都继承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

相关文章