Array.SyncRoot プロパティ

定義

Array へのアクセスを同期するために使用できるオブジェクトを取得します。Gets an object that can be used to synchronize access to the 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 へのアクセスを同期するために使用できるオブジェクト。An object that can be used to synchronize access to the Array.

実装

次のコード例は、SyncRoot プロパティを使用して、列挙体全体で配列をロックする方法を示しています。The following code example shows how to lock an array during the entire enumeration by using the SyncRoot property.

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);
}
Array myArray = new int[] { 1, 2, 4 };
lock(myArray.SyncRoot) 
{
    foreach (Object item in myArray)
        Console.WriteLine(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 インターフェイスを実装します。This property implements the System.Collections.ICollection interface.

Array に基づく .NET Framework クラスは、SyncRoot プロパティを使用して、独自に同期されたバージョンのコレクションを提供します。.NET Framework classes based on Array provide their own synchronized version of the collection using the SyncRoot property.

配列を使用するクラスは、SyncRoot プロパティを使用して独自の同期を実装することもできます。Classes that use arrays can also implement their own synchronization using the SyncRoot property. 同期コードは、コレクションに対して直接ではなく、コレクションの SyncRoot に対して操作を実行する必要があります。The synchronizing code must perform operations on the SyncRoot of the collection, not directly on the collection. こうすることにより、他のオブジェクトから派生したコレクションを適切に操作することができます。This ensures proper operation of collections that are derived from other objects. 具体的には、コレクションを同時に変更している可能性のある他のスレッドとの適切な同期を維持します。Specifically, it maintains proper synchronization with other threads that might be simultaneously modifying the collection. SyncRoot の一部の実装では、Array 自体が返される場合があることに注意してください。Note that some implementations of SyncRoot might return the Array itself.

コレクションの列挙は、本質的にスレッド セーフな手続きではありません。Enumerating through a collection is intrinsically not a thread safe procedure. コレクションが同期されていても、他のスレッドがコレクションを変更する場合があり、このときは列挙子から例外がスローされます。Even when a collection is synchronized, other threads can still modify the collection, which causes the enumerator to throw an exception. 列挙処理を確実にスレッド セーフに行うには、列挙中にコレクションをロックするか、他のスレッドによって行われた変更によってスローされる例外をキャッチします。To guarantee thread safety during enumeration, you can either lock the collection during the entire enumeration or catch the exceptions resulting from changes made by other threads.

このプロパティ値を取得することは、O(1) 操作になります。Retrieving the value of this property is an O(1) operation.

適用対象

こちらもご覧ください