Array.IsSynchronized 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取一个值,该值指示对 Array 同步的访问是否同步(线程安全)。
public:
property bool IsSynchronized { bool get(); };
public:
virtual property bool IsSynchronized { bool get(); };
public bool IsSynchronized { get; }
public virtual bool IsSynchronized { get; }
member this.IsSynchronized : bool
Public ReadOnly Property IsSynchronized As Boolean
Public Overridable ReadOnly Property IsSynchronized As Boolean
属性值
此属性始终 false 适用于所有数组。
实现
示例
下面的代码示例演示如何使用 SyncRoot 属性在整个枚举期间锁定数组。
Array myArray = new int[] { 1, 2, 4 };
lock(myArray.SyncRoot)
{
foreach (Object item in myArray)
Console.WriteLine(item);
}
let myArray = [| 1; 2; 4|]
lock myArray.SyncRoot (fun () ->
for item in myArray do
printfn $"{item}" )
Dim myArray As Array = New Integer() { 1, 2, 4 }
SyncLock(myArray.SyncRoot)
For Each item As Object In myArray
Console.WriteLine(item)
Next
End SyncLock
注解
Array 实现该 IsSynchronized 属性,因为接口需要 System.Collections.ICollection 此属性。
基于 Array 使用属性提供其自己的集合 SyncRoot 同步版本的 .NET 类。
使用数组的类还可以使用 SyncRoot 属性实现自己的同步。 同步代码必须对 SyncRoot 集合执行操作,而不是直接对集合执行操作。 这可确保从其他对象派生的集合的正确操作。 具体而言,它与其他可能同时修改集合的线程保持适当的同步。 请注意,某些实现 SyncRoot 可能会返回 Array 自身。
通过集合进行枚举本质上不是线程安全过程。 即使集合同步,其他线程仍可以修改集合,这会导致枚举器引发异常。 若要保证枚举期间的线程安全性,可以在整个枚举期间锁定集合,也可以捕获由其他线程所做的更改导致的异常。
检索此属性的值是 O(1) 操作。