คุณสมบัติ Queue.IsSynchronized ใน C# ใช้สำหรับตรวจสอบว่า Queue นั้นปลอดภัยเธรด (thread-safe) หรือไม่ โดยคืนค่า true หากปลอดภัยเธรด มิฉะนั้นคืนค่า false
ไวยากรณ์ (Syntax)
public virtual bool IsSynchronized { get; }
ตัวอย่างที่ 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
ตัวอย่างที่ 2: ทำให้ Queue ปลอดภัยเธรดด้วย 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 ปกติ (non-generic และ generic) ไม่ได้ปลอดภัยเธรดโดยค่าเริ่มต้น (
IsSynchronized = false) - ใช้
Queue.Synchronized(queue)เพื่อสร้างวอร์ปเปอร์ที่ปลอดภัยเธรด - คุณสมบัติ
IsSynchronizedเป็น read-only — ไม่สามารถตั้งค่าได้โดยตรง - ใน .NET Core/.NET 5+ แนะนำให้ใช้
ConcurrentQueue<T>จาก namespaceSystem.Collections.Concurrentแทน เพราะมีประสิทธิภาพดีกว่าและออกแบบมาสำหรับการทำงานแบบคู่ขนานโดยเฉพาะ