温故知新,CSharp遇见线程安全的并发堆栈(ConcurrentStack,后进先出)、线程安全的并发队列(ConcurrentQueue,先进先出)

ConcurrentStack

并发堆栈(ConcurrentStack<T>)是线程安全的后进先出(LIFO)的集合。

特点

  • 线程安全
  • 后进先出(Last in, First out)

image

定义它

private static readonly ConcurrentStack<string> _stack = new ConcurrentStack<string>();

基本使用

// 在顶部插入一个对象
_stack.Push("first");
_stack.Push("second");

// 如果顶部有对象就返回,但不删除对象
_stack.TryPeek(out var result0);
Console.WriteLine(result0);

// 如果顶部有对象就返回,同时删除对象
_stack.TryPop(out var result1);
Console.WriteLine(result1);

// 如果顶部有对象就返回,同时删除对象
_stack.TryPop(out var result2);
Console.WriteLine(result2);

// 如果顶部没有对象,就返回空
_stack.TryPop(out var result3);
Console.WriteLine(result3);

ConcurrentQueue

并发队列(ConcurrentQueue<T>)是线程安全的先进先出(FIFO)的集合。

特点

  • 线程安全
  • 先进先出(First Input, First Output)

定义它

private static readonly ConcurrentQueue<string> _queue = new ConcurrentQueue<string>();

基本使用

// 在末尾添加一个对象
_queue.Enqueue("first");
_queue.Enqueue("second");

// 尝试拿出开头的对象,但不移除对象
_queue.TryPeek(out var result3);
Console.WriteLine(result3);

// 尝试拿出开头的对象,同时删除对象
_queue.TryDequeue(out var result4);
Console.WriteLine(result4);

// 尝试拿出开头的对象,同时删除对象
_queue.TryDequeue(out var result5);
Console.WriteLine(result5);

// 尝试拿出开头的对象,没有可拿的就返回空
_queue.TryDequeue(out var result6);
Console.WriteLine(result6);

参考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章