四大并发类

一:我们的集合是没有锁机制的

所以我们目前的集合都是线程不安全的

二:有哪些线程安全的集合

  1. ConcurrentQueue==>Queue
  2. ConcurrentDictionary<TKey, TValue> ==>Dictionary
  3. ConcurrentStack==>Stack
  4. ConcurrentBag==>list Or LinkList

三:ConcurrentBag

ConcurrentBag 利用线程槽来分摊Bag中数据

ConcurrentBag 的数据放置咋i多个插入线程的槽位汇总。

底层是链表

 ConcurrentBag<int> vs = new ConcurrentBag<int>();
        vs.Add(1);
        vs.Add(2);
Console.WriteLine(vs.Count);
    for (int i = 0; i < vs.Count; i++)
    {
        var result = 0;
        vs.TryTake(out result);
        Console.WriteLine(result);
    }

四:ConcurrentStack

线程安全的Stack是使用链表实现的,同步版本是用数组实现的

线程安全的Stack是使用Interloacked来实现线程安全,没使用内核锁

ConcurrentStack<int> vs = new ConcurrentStack<int>();
      vs.Push(1);
      vs.Push(2);

      Console.WriteLine(vs.Count);
      for (int i = 0; i < vs.Count; i++)
      {
          var result = 0;
          vs.TryPop(out result);
          Console.WriteLine(result);
      }

五:ConcurrentQueue

使用单链表实现

1
2
大专栏  四大并发类"line">3
4
5
6
ConcurrentQueue<int> vs = new ConcurrentQueue<int>();
vs.Enqueue(1);

var result = 0;
vs.TryDequeue(out result);
Console.WriteLine(result);

六:ConcurrentDictionary<TKey, TValue>

1
2
3
4
5
6
7
8
9
ConcurrentDictionary<int, int> dic = new ConcurrentDictionary<int, int>();
dic.TryAdd(1,10);

dic.ContainsKey(1);

foreach (var item in dic)
{
Console.WriteLine(item.Key+item.Value);
}
原文地址:https://www.cnblogs.com/lijianming180/p/12361308.html