📌  相关文章
📜  C#|检查数组是否同步(线程安全)

📅  最后修改于: 2021-05-30 00:50:20             🧑  作者: Mango

Array.IsSynchronized属性用于获取一个值,该值指示是否同步对数组的访问(线程安全)。

句法:

public bool IsSynchronized { get; }

属性值:对于所有数组,此属性始终返回false。

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

范例1:

// C# program to illustrate
// IsSynchronized Property of
// Array class
using System;
namespace geeksforgeeks {
  
class GFG {
  
    // Main Method
    public static void Main()
    {
  
        // The array with dimensions  
        // specified 4 row and 2 column. 
        int[, ] arr = new int[4, 2] {{1, 2 }, {3, 4},  
                                            {5, 6 }, {7, 8}};
  
        // Here we check whether the
        // array is synchronized (thread safe)
        // or not
        Console.WriteLine("Result: " + arr.IsSynchronized);
    }
}
}
输出:
Result: False

范例2:

// C# program to illustrate
// IsSynchronized Property of
// Array class
using System;
namespace geeksforgeeks {
  
class GFG {
  
    // Main Method
    public static void Main()
    {
  
        // declares an 1D Array of string.
        string[] topic;
  
        // allocating null to array
        topic = new string[] { null };
  
        // Here we check whether the
        // array is synchronized (thread safe)
        // or not
        Console.WriteLine("Result: " + topic.IsSynchronized);
    }
}
}
输出:
Result: False

笔记:

  • Array实现IsSynchronized属性,因为System.Collections.ICollection接口需要它。
  • 使用数组的类也可以使用SyncRoot属性来实现自己的同步。
  • 通过集合进行枚举不是线程安全的过程。即使同步了一个集合,其他线程仍然可以修改该集合,这将导致枚举器引发异常。为了保证枚举期间的线程安全,您可以在整个枚举期间锁定集合,也可以捕获由其他线程进行的更改导致的异常。
  • 检索此属性的值是O(1)操作。

参考:

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