Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

คุณสมบัติ Queue.IsSynchronized ใน C# พร้อมตัวอย่าง


คุณสมบัติ 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> จาก namespace System.Collections.Concurrent แทน เพราะมีประสิทธิภาพดีกว่าและออกแบบมาสำหรับการทำงานแบบคู่ขนานโดยเฉพาะ