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に基づく .NET クラスは、SyncRoot プロパティを使用して、独自の同期バージョンのコレクションを提供します。
配列を使用するクラスは、 SyncRoot プロパティを使用して独自の同期を実装することもできます。 同期コードは、コレクションに対して直接ではなく、コレクションの SyncRoot に対して操作を実行する必要があります。 これにより、他のオブジェクトから派生したコレクションの適切な操作が保証されます。 具体的には、コレクションを同時に変更している可能性がある他のスレッドとの適切な同期が維持されます。
SyncRootの実装によっては、Array自体が返される場合があることに注意してください。
コレクションを通じて列挙することは、本質的にスレッド セーフなプロシージャではありません。 コレクションが同期されている場合でも、他のスレッドはコレクションを変更できるため、列挙子は例外をスローします。 列挙中のスレッド セーフを保証するには、列挙全体の間にコレクションをロックするか、他のスレッドによって行われた変更によって発生する例外をキャッチします。
このプロパティの値の取得は O(1) 操作です。