DictionaryBase.ICollection.SyncRoot プロパティ
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
DictionaryBase オブジェクトへのアクセスを同期するために使用できるオブジェクトを取得します。
property System::Object ^ System::Collections::ICollection::SyncRoot { System::Object ^ get(); };
object System.Collections.ICollection.SyncRoot { get; }
member this.System.Collections.ICollection.SyncRoot : obj
ReadOnly Property SyncRoot As Object Implements ICollection.SyncRoot
プロパティ値
DictionaryBase オブジェクトへのアクセスを同期するために使用できるオブジェクト。
実装
例
次のコード例は、列挙体全体で SyncRoot プロパティを使用してコレクションをロックする方法を示しています。
ICollection myCollection = new ShortStringDictionary();
lock(myCollection.SyncRoot)
{
foreach (Object item in myCollection)
{
// Insert your code here.
}
}
Dim myCollection As ICollection = New ShortStringDictionary()
SyncLock myCollection.SyncRoot
For Each item In myCollection
' Insert your code here.
Next item
End SyncLock
このプロパティの値の取得は、 O(1) 操作です。
注釈
派生クラスは、SyncRoot プロパティを使用して、DictionaryBase クラスの独自の同期バージョンを提供できます。 同期コードは、DictionaryBase オブジェクトに対して直接ではなく、DictionaryBase オブジェクトのSyncRoot プロパティに対して操作を実行する必要があります。 これにより、他のオブジェクトから派生したコレクションの適切な操作が保証されます。 具体的には、 DictionaryBase オブジェクトを同時に変更している可能性がある他のスレッドとの適切な同期を維持します。
コレクションを列挙することは、本質的にスレッド セーフなプロシージャではありません。 コレクションが同期されている場合でも、他のスレッドはコレクションを変更できるため、列挙子は例外をスローします。 列挙中のスレッド セーフを保証するには、列挙全体の間にコレクションをロックするか、他のスレッドによって行われた変更によって発生する例外をキャッチします。