C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#でのスレッドセーフな並行コレクション


.NET Framework 4は、System.Collections.Concurrent名前空間をもたらしました。これには、スレッドセーフでスケーラブルなコレクションクラスがいくつかあります。これらのコレクションは、一度に複数のスレッドからアクセスできるため、同時コレクションと呼ばれます。

以下は、C#での同時収集です-

タイプと説明
Sr.No
1 BlockingCollection
あらゆるタイプの境界およびブロック機能。
2 ConcurrentDictionary
キーと値のペアの辞書のスレッドセーフな実装。
3 ConcurrentQueue
FIFO(先入れ先出し)キューのスレッドセーフな実装。
4 ConcurrentStack
LIFO(後入れ先出し)スタックのスレッドセーフな実装。
5 ConcurrentBag
要素の順序付けられていないコレクションのスレッドセーフな実装。
6 IProducerConsumerCollection
BlockingCollectionで使用するために型が実装する必要のあるインターフェース

スレッドセーフな後入先出(LIFO)コレクションであるConcurrentStackを操作する方法を見てみましょう。

ConcurrentStackを作成します。

ConcurrentStack<int> s = new ConcurrentStack<int>();

要素を追加

s.Push(1);
s.Push(2);
s.Push(3);
s.Push(4);
s.Push(5);
s.Push(6);

例を見てみましょう

using System;
using System.Collections.Concurrent;

class Demo{
   static void Main (){
      ConcurrentStack s = new ConcurrentStack();

      s.Push(50);
      s.Push(100);
      s.Push(150);
      s.Push(200);
      s.Push(250);
      s.Push(300);

      if (s.IsEmpty){
         Console.WriteLine("The stack is empty!");
      }

      else {
         Console.WriteLine("The stack isn't empty");
      }
   }
}

  1. Javaでコレクションスレッドを安全にする方法は?

    コレクションのみを処理するjava.utilパッケージメソッドのCollectionsクラスは、これらのメソッドがポリモーフィックアルゴリズムを含むさまざまな追加操作を提供します。 このクラスは、以下に示すように、synchronizedCollection()メソッドのさまざまなバリアントを提供します- Sr.No メソッドと説明 1 静的コレクションsynchronizedCollection(コレクション c) このメソッドは、任意のコレクションオブジェクトを受け入れ、指定されたコレクションに基づく同期された(スレッドセーフな)コレクションを返します。

  2. Python辞書はスレッドセーフだと思いますか?

    はい、Python辞書はスレッドセーフです。実際、Pythonのすべての組み込みはスレッドセーフです。これについて詳しくは、ドキュメントをご覧ください:https://docs.python.org/3/glossary.html#term-global-interpreter-lock