次の方法で共有


Array.SyncRoot プロパティ

定義

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に基づく .NET クラスは、SyncRoot プロパティを使用して、独自の同期バージョンのコレクションを提供します。

配列を使用するクラスは、 SyncRoot プロパティを使用して独自の同期を実装することもできます。 同期コードは、コレクションに対して直接ではなく、コレクションの SyncRoot に対して操作を実行する必要があります。 これにより、他のオブジェクトから派生したコレクションの適切な操作が保証されます。 具体的には、コレクションを同時に変更している可能性がある他のスレッドとの適切な同期が維持されます。 SyncRootの実装によっては、Array自体が返される場合があることに注意してください。

コレクションを通じて列挙することは、本質的にスレッド セーフなプロシージャではありません。 コレクションが同期されている場合でも、他のスレッドはコレクションを変更できるため、列挙子は例外をスローします。 列挙中のスレッド セーフを保証するには、列挙全体の間にコレクションをロックするか、他のスレッドによって行われた変更によって発生する例外をキャッチします。

このプロパティの値の取得は O(1) 操作です。

適用対象

こちらもご覧ください