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");
}
}
} -
Javaでコレクションスレッドを安全にする方法は?
コレクションのみを処理するjava.utilパッケージメソッドのCollectionsクラスは、これらのメソッドがポリモーフィックアルゴリズムを含むさまざまな追加操作を提供します。 このクラスは、以下に示すように、synchronizedCollection()メソッドのさまざまなバリアントを提供します- Sr.No メソッドと説明 1 静的コレクションsynchronizedCollection(コレクション c) このメソッドは、任意のコレクションオブジェクトを受け入れ、指定されたコレクションに基づく同期された(スレッドセーフな)コレクションを返します。
-
Python辞書はスレッドセーフだと思いますか?
はい、Python辞書はスレッドセーフです。実際、Pythonのすべての組み込みはスレッドセーフです。これについて詳しくは、ドキュメントをご覧ください:https://docs.python.org/3/glossary.html#term-global-interpreter-lock