首页 > 编程语言 > 详细

线程安全集合

时间:2020-03-11 19:56:27      阅读:60      评论:0      收藏:0      [点我收藏+]

.NET Framework 4 引入了 System.Collections.Concurrent 命名空间,其中包含多个线程安全且可缩放的集合类。
技术分享图片

何时使用线程安全集合

.NET Framework 4 新引入了五个专为支持多线程添加和删除操作而设计的集合类型。 为了实现线程安全性,这些新类型使用多种高效的锁定和免锁定同步机制。
需要注意的是,Concurrent命名空间下的类保证线程安全,读写为最新值(不会脏读,不会死锁),并不代表逻辑业务上的线程安全,该用Lock还是要Lock。

参考资料

线程安全集合
何时使用线程安全集合

ConcurrentBag

ConcurrentBag是无序集合,不保证顺序
ConcurrentBag

var random = new Random();
var totalCount = 100;
ConcurrentBag<int> bag = new ConcurrentBag<int>();
Parallel.For(0, totalCount*10, item =>
{
    if(bag.Count<= totalCount)
    {
        bag.Add(item);
    }
});
//有时会超过100个
Console.WriteLine("ConcurrentBag's count is {0}", bag.Count());
int n = 0;
foreach (int i in bag)
{
    if (n > 10)
        break;
    n++;
    //输出结果随机,因为是并行的
    Console.WriteLine("Item[{0}] = {1}", n, i);
}
Console.WriteLine("ConcurrentBag's max item is {0}", bag.Max());

结果
技术分享图片

ConcurrentQueue

线程安全队列
ConcurrentQueue

ConcurrentStack

线程安全队列
ConcurrentStack

ConcurrentDictionary

线程安全字典
ConcurrentDictionary<TKey,TValue> 类

示例代码

示例代码

线程安全集合

原文:https://www.cnblogs.com/Lulus/p/12464548.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!