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