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 = 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);
}
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) 操作になります。
適用対象
こちらもご覧ください
.NET