Array.IsSynchronized プロパティ
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
Array へのアクセスが同期されているかどうかを示す値を取得します (スレッド セーフ)。
public:
property bool IsSynchronized { bool get(); };
public:
virtual property bool IsSynchronized { bool get(); };
public bool IsSynchronized { get; }
public virtual bool IsSynchronized { get; }
member this.IsSynchronized : bool
Public ReadOnly Property IsSynchronized As Boolean
Public Overridable ReadOnly Property IsSynchronized As Boolean
プロパティ値
このプロパティは、すべての配列に対して常に false されます。
実装
例
次のコード例は、 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
注釈
Arrayは、IsSynchronized インターフェイスで必要であるため、System.Collections.ICollection プロパティを実装します。
Arrayに基づく .NET クラスは、SyncRoot プロパティを使用して、独自の同期バージョンのコレクションを提供します。
配列を使用するクラスは、 SyncRoot プロパティを使用して独自の同期を実装することもできます。 同期コードは、コレクションに対して直接ではなく、コレクションの SyncRoot に対して操作を実行する必要があります。 これにより、他のオブジェクトから派生したコレクションの適切な操作が保証されます。 具体的には、コレクションを同時に変更している可能性がある他のスレッドとの適切な同期が維持されます。
SyncRootの実装によっては、Array自体が返される場合があることに注意してください。
コレクションを通じて列挙することは、本質的にスレッド セーフなプロシージャではありません。 コレクションが同期されている場合でも、他のスレッドはコレクションを変更できるため、列挙子は例外をスローします。 列挙中のスレッド セーフを保証するには、列挙全体の間にコレクションをロックするか、他のスレッドによって行われた変更によって発生する例外をキャッチします。
このプロパティの値の取得は O(1) 操作です。