C#のQueue.IsSynchronizedプロパティとは?使い方とサンプルコードを解説
C#のQueue.IsSynchronizedプロパティは、Queueへのアクセスが同期されている(スレッドセーフである)かどうかを示すbool型の値を取得するために使用されます。
非ジェネリックなQueueクラスは、既定ではスレッドセーフではありません。そのため、複数のスレッドから同時に同じキューへアクセスする可能性がある場合は、このプロパティで同期状態を確認することが重要です。同期が必要な場合は、Queue.Synchronizedメソッドで同期ラッパーを作成できます。
構文
構文は以下のとおりです。
public virtual bool IsSynchronized { get; }戻り値
Queueへのアクセスが同期されている(スレッドセーフである)場合は true、そうでない場合は false を返します。
例1:通常のQueueの場合
まず、基本的な使用例を見てみましょう。
using System;
using System.Collections;
public class Demo {
public static void Main() {
Queue queue = new Queue();
queue.Enqueue(100);
queue.Enqueue(200);
queue.Enqueue(300);
queue.Enqueue(400);
queue.Enqueue(500);
queue.Enqueue(600);
queue.Enqueue(700);
queue.Enqueue(800);
queue.Enqueue(900);
queue.Enqueue(1000);
Console.WriteLine("Queue...");
IEnumerator demoEnum = queue.GetEnumerator();
while (demoEnum.MoveNext()) {
Console.WriteLine(demoEnum.Current);
}
Console.WriteLine("Is Queue synchronized? = " + queue.IsSynchronized);
}
}出力
上記のコードを実行すると、次のような出力が得られます。
Queue... 100 200 300 400 500 600 700 800 900 1000 Is Queue synchronized? = False
通常のQueueインスタンスに対しては False が返されることが確認できます。
例2:Queue.Synchronizedで同期ラッパーを作成した場合
次に、Queue.Synchronizedメソッドを使って同期ラッパーを作成した場合の挙動を確認してみましょう。
using System;
using System.Collections;
public class Demo {
public static void Main() {
Queue queue = new Queue();
queue.Enqueue("AB");
queue.Enqueue("BC");
queue.Enqueue("CD");
queue.Enqueue("DE");
queue.Enqueue("EF");
queue.Enqueue("FG");
queue.Enqueue("GH");
queue.Enqueue("HI");
Console.WriteLine("Queue...");
IEnumerator demoEnum = queue.GetEnumerator();
while (demoEnum.MoveNext()) {
Console.WriteLine(demoEnum.Current);
}
Console.WriteLine("Is Queue synchronized? = " + queue.IsSynchronized);
Queue queue2 = Queue.Synchronized(queue);
Console.WriteLine("Is Queue synchronized now? = " + queue2.IsSynchronized);
}
}出力
上記のコードを実行すると、次のような出力が得られます。
Queue... AB BC CD DE EF FG GH HI Is Queue synchronized? = False Is Queue synchronized now? = True
元のqueueオブジェクトは False を返しますが、Queue.Synchronizedメソッドで作成した同期ラッパー(queue2)に対しては True が返されることがわかります。マルチスレッド環境で非ジェネリックなQueueを安全に扱いたい場合は、必ず同期ラッパー経由でアクセスするようにしましょう。
-
C#のQueueクラスにおけるCountプロパティの使い方を解説
C#のQueueクラスには、キューに格納されている要素の数を取得するためのCountプロパティが用意されています。Countプロパティは読み取り専用で、現在キューに含まれる要素数をint型の値として返します。 Queueへの要素の追加方法 Queueに要素を追加するには、Enqueueメソッドを使用します。以下のようにインスタンスを作成し、要素を順番に追加していきます。 Queue q = new Queue(); q.Enqueue(1); q.Enqueue(2); q.Enqueue(3); q.Enqueue(4); Countプロパティで要素数を取得する 要素を追加した後、C
-
Pythonでキュー(Queue)を実装するプログラムの書き方
Pythonでキュー(Queue)を実装するには、専用のクラスを作成し、要素を追加・削除するためのメソッドを定義します。その後、クラスのインスタンスを生成し、メソッドを呼び出すことで各種操作を行い、結果をコンソールに表示します。キューは「先入れ先出し(FIFO:First In First Out)」と呼ばれるデータ構造で、最初に追加した要素が最初に取り出されるという特徴があります。タスク管理やバッファ処理など、さまざまな場面で活用される基本的な構造です。以下に、Pythonでのキューの実装例を示します。サンプルコードclass Queue_struct: &