📜  C#中的Queue.IsSynchronized属性

📅  最后修改于: 2021-05-29 19:59:49             🧑  作者: Mango

使用此属性可获得一个值,该值指示是否同步对队列的访问(线程安全)。

句法:

public virtual bool IsSynchronized { get; }

属性值:如果同步访问队列(线程安全),则此属性返回true,否则返回false。默认为false。

下面的程序说明了上面讨论的属性的用法:

范例1:

// C# code to illustrate the
// Queue.IsSynchronized Property
using System;
using System.Collections;
  
class GFG {
  
    // Driver code
    public static void Main()
    {
  
        // Creating a Queue
        Queue myQueue = new Queue();
  
        // Inserting the elements into the Queue
        myQueue.Enqueue("C");
        myQueue.Enqueue("C++");
        myQueue.Enqueue("Java");
        myQueue.Enqueue("C#");
        myQueue.Enqueue("HTML");
        myQueue.Enqueue("CSS");
  
        // Creates a synchronized
        // wrapper around the Queue
        Queue sq = Queue.Synchronized(myQueue);
  
        // Displays the synchronization
        // status of both Queue
        Console.WriteLine("myQueue is {0}.", myQueue.IsSynchronized ?
                                "Synchronized" : "Not Synchronized");
  
        Console.WriteLine("sq is {0}.", sq.IsSynchronized ? 
                       "Synchronized" : "Not Synchronized");
    }
}
输出:
myQueue is Not Synchronized.
sq is Synchronized.

范例2:

// C# code to check if Queue
// Is Synchronized or not
using System;
using System.Collections;
  
class GFG {
  
    // Driver code
    public static void Main()
    {
  
        // Creating a Queue
        Queue myQueue = new Queue();
  
        // Inserting the elements into the Queue
        myQueue.Enqueue(1);
        myQueue.Enqueue(2);
        myQueue.Enqueue(3);
        myQueue.Enqueue(4);
  
        // the default is false for
        // IsSynchronized property
        Console.WriteLine(myQueue.IsSynchronized);
    }
}
输出:
False

笔记:

  • 检索此属性的值是O(1)操作。
  • 为了保证Queue的线程安全,所有操作必须通过Synchronized方法返回的包装器完成。
  • 通过集合进行枚举本质上不是线程安全的过程。即使同步了一个集合,其他线程仍然可以修改该集合,这将导致枚举器引发异常。

参考:

  • https://docs.microsoft.com/zh-cn/dotnet/api/system.collections.queue.issynchronized?view=netframework-4.7.2