zoukankan      html  css  js  c++  java
  • C# 线程安全集合类

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
    本文链接:https://blog.csdn.net/kang_xuan/article/details/93979517
    本文章仅为个人理解,如有错误请指正。
    
    从.Net 4.0框架开始,在System.Collections.Concurrent命名空间下,增加了用于多线程协同的并发集合类(线程安全集合)。
    
    线程安全集合:
    就是当多线程访问时,采用了加锁的机制;即当一个线程访问集合时,会对这个集合进行保护,其他线程不能对其访问,直到该线程操作完集合之后,其他线程才可以使用。防止出现数据不一致或者数据被污染的情况。
    
    只能保证集合的原子性、可见性,但是无法保证对集合操作的有序性,例如:多个线程同时将元素加入到集合,无法保证元素加入到集合的顺序,多次运行情况结果会不同。
    
    BlockingCollection<T>
    提供具有阻塞和限制功能的线程安全集合,实现IProducerConsumerCollection<T>接口。支持容量大小的限制和完成添加限制,当标记为完成添加后只允许移除(Take)操作,无法进行添加(Add)操作。
    
    BoundedCapacity:获取集合限定容量,在通过构造函数时可以指定集合的容量大小。
    
    IsAddingCompleted:判断是否已经标记完成添加,
    
    IsCompleted:判断是否标记完成添加并且为空。
    
    Add:将项添加到集合中。
    
    CompleteAdding:将集合标记为完成添加。调用该函数后IsAddingCompleted为true,如果集合中包含的项数为0,那么IsCompleted也为true。
    
    Take:从集合中移除一项。
    
    TryAdd:尝试将项加入集合
    
    TryTake:尝试从集合中移除项。
    
    ConcurrentBag<T>
    提供可供多个线程同时安全访问的无序包。对应非泛型列表List<T>。
    
    包(Bag)和数据上的集(Set)的区别是包可包含重复元素,而集中不能包含重复元素。
    
    Count:获取无序包中的元素数量
    
    IsEmpty:判断无序包是否为空。
    
    TryPeek:从无序包中获取一个元素,但不进行移除。
    
    TryTask:从无序包获取一个元素并移除。
    
    ConcurrentDictionary<TKey,TValue>
    提供可供多线程同时访问的键值对的线程安全集合,对应Dictionary<TKey, TValue>。
    
    IsEmpty:判断字典是否为空。
    
    AddOrUpdate:将键值对添加到字典中,如果Key值已经存在,则更新Value值。
    
    Clear:将所有键值对从字典中移除。
    
    GetOrAdd:如果键不存在,则将键值对添加到字典中并返回Value值,如果键已经存在,则返回现有值,不会更新现有值。
    
    TryUpdate:尝试更新键对应的Value值。
    
    ConcurrentQueue<T>
    队列,提供线程安全的先进先出(FIFO)集合,对应Queue<T>。
    
    Enqueue:将对象添加到队列末尾处。
    
    TryDequeue:尝试移除并返回位于队列开头处的对象。
    
    TryPeek:尝试返回队列开头处的对象但不将其移除。
    
    ConcurrentStack<T>
    栈,提供线程安全的后进先出(LIFO)集合,对应Stack<T>
    
    Push:将对象插入栈顶部。
    
    PushRange:将多个对象插入栈的顶部。
    
    TryPeek:尝试返回栈顶部的对象但不将其移除。
    
    TryPop:尝试弹出并返回栈顶部的对象。
    
    TryPopRange:尝试弹出并返回栈顶部的多个对象。
    ————————————————
    版权声明:本文为CSDN博主「玄之」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/kang_xuan/article/details/93979517
  • 相关阅读:
    2020.10.25【NOIP提高A组】模拟 总结
    6831. 2020.10.24【NOIP提高A组】T1.lover
    枚举一个数$n$的所有质因子
    gmoj 6832. 2020.10.24【NOIP提高A组】T2.world
    2020.10.24【NOIP提高A组】模拟 总结
    2020.10.17【NOIP提高A组】模拟 总结
    jQuery EasyUI Portal 保存拖动位置,仿谷歌DashBoard效果的
    SQLMAP注入教程-11种常见SQLMAP使用方法详解
    Windows下sqlmap的安装图解
    swap file "*.swp" already exists!的解决方法
  • 原文地址:https://www.cnblogs.com/Jeely/p/11711602.html
Copyright © 2011-2022 走看看