溫故知新,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);

參考

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