Array.SyncRoot 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取可用于同步对 . Array的访问的对象。
public:
property System::Object ^ SyncRoot { System::Object ^ get(); };
public:
virtual property System::Object ^ SyncRoot { System::Object ^ get(); };
public object SyncRoot { get; }
public virtual object SyncRoot { get; }
member this.SyncRoot : obj
Public ReadOnly Property SyncRoot As Object
Public Overridable ReadOnly Property SyncRoot As Object
属性值
可用于同步对 . Array. 的访问的对象。
实现
示例
下面的代码示例演示如何使用 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
注解
此属性实现 System.Collections.ICollection 接口。
基于 Array 使用属性提供其自己的集合 SyncRoot 同步版本的 .NET 类。
使用数组的类还可以使用 SyncRoot 属性实现自己的同步。 同步代码必须对 SyncRoot 集合执行操作,而不是直接对集合执行操作。 这可确保从其他对象派生的集合的正确操作。 具体而言,它与其他可能同时修改集合的线程保持适当的同步。 请注意,某些实现 SyncRoot 可能会返回 Array 自身。
通过集合进行枚举本质上不是线程安全过程。 即使集合同步,其他线程仍可以修改集合,这会导致枚举器引发异常。 若要保证枚举期间的线程安全性,可以在整个枚举期间锁定集合,也可以捕获由其他线程所做的更改导致的异常。
检索此属性的值是 O(1) 操作。