次の方法で共有


Array.IsSynchronized プロパティ

定義

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) 操作になります。

適用対象

こちらもご覧ください