Array.SyncRoot 属性

获取可用于同步 Array 访问的对象。

**命名空间:**System
**程序集:**mscorlib(在 mscorlib.dll 中)

语法

声明
Public ReadOnly Property SyncRoot As Object
用法
Dim instance As Array
Dim value As Object

value = instance.SyncRoot
public Object SyncRoot { get; }
public:
virtual property Object^ SyncRoot {
    Object^ get () sealed;
}
/** @property */
public final Object get_SyncRoot ()
public final function get SyncRoot () : Object

属性值

可用于同步对 Array 的访问的对象。

备注

此属性实现 System.Collections.ICollection 接口。

基于 Array 的 .NET Framework 类使用 SyncRoot 属性提供它们自己的集合同步版本。

使用数组的类也可以使用 SyncRoot 属性来实现它们自己的同步。同步代码必须在集合的 SyncRoot 上执行操作,而不是直接在集合上执行操作。这确保了从其他对象派生的集合的正确操作。具体来说,它与可能同时修改集合的其他线程保持适当的同步。请注意,SyncRoot 的一些实现可能返回 Array 本身。

从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。即使一个集合已进行同步,其他线程仍可以修改该集合,这将导致枚举数引发异常。若要在枚举过程中保证线程安全,可以在整个枚举过程中锁定集合,或者捕捉由于其他线程进行的更改而引发的异常。

检索此属性的值的运算复杂度为 O(1)。

示例

下面的代码示例演示如何使用 SyncRoot 属性在整个枚举过程中锁定数组。

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 myArray = new int[] { 1, 2, 4 };
lock(myArray.SyncRoot) 
{
    foreach (Object item in myArray)
        Console.WriteLine(item);
}
Array^ myArray = gcnew array<Int32> { 1, 2, 4 };
try
{
    Monitor::Enter(myArray->SyncRoot); 
        
    for each (Int32 item in myArray)
        Console::WriteLine(item);
}
finally
{
    Monitor::Exit(myArray->SyncRoot);
}

平台

Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

.NET Compact Framework

受以下版本支持:2.0、1.0

请参见

参考

Array 类
Array 成员
System 命名空间
Array.IsSynchronized 属性