次の方法で共有


Array.IsSynchronized プロパティ

Array へのアクセスが同期されている (スレッド セーフである) かどうかを示す値を取得します。

Public Overridable ReadOnly Property IsSynchronized As Boolean  _   Implements ICollection.IsSynchronized
[C#]
public virtual bool IsSynchronized {get;}
[C++]
public: __property virtual bool get_IsSynchronized();
[JScript]
public function get IsSynchronized() : Boolean;

プロパティ値

このプロパティは、すべての配列に対して常に false です。

実装

ICollection.IsSynchronized

解説

Array は、 System.Collections.ICollection インターフェイスに必要な IsSynchronized プロパティを実装します。

Array に基づく .NET Framework クラスでは、 SyncRoot プロパティを使用して、独自にコレクションを同期させることができます。

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

コレクションの列挙処理は、本質的にはスレッド セーフな処理ではありません。コレクションが同期されている場合でも、他のスレッドがそのコレクションを変更する可能性はあり、そのような状況が発生すると列挙子は例外をスローします。列挙処理を確実にスレッド セーフに行うには、列挙中にコレクションをロックするか、他のスレッドによって行われた変更によってスローされる例外をキャッチする方法のいずれかを実行できます。

[Visual Basic, C#] 列挙処理中に SyncRoot を使用してコレクションをロックする方法を次のコード例に示します。

 
Array myCollection = new int[];
 lock( myCollection.SyncRoot ) {
 foreach ( Object item in myCollection ) {
 // Insert your code here.
 }
}
[Visual Basic] 
Dim myCollection As New Int[]
Dim item As Object
SyncLock myCollection.SyncRoot
 For Each item In myCollection
 ' Insert your code here.
 Next item
End SyncLock

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard

参照

Array クラス | Array メンバ | System 名前空間 | SyncRoot | System.Collections.ICollection