Dictionary<TKey,TValue>.KeyCollection.ICollection.SyncRoot プロパティ
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
ICollection へのアクセスを同期するために使用できるオブジェクトを取得します。
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
プロパティ値
ICollection へのアクセスの同期に使用できるオブジェクトです。 Dictionary<TKey,TValue>.KeyCollection の既定の実装では、このプロパティは常に現在のインスタンスを返します。
実装
注釈
の System.Collections.Generic コレクションの既定の実装は同期されません。
コレクションの列挙処理は、本質的にスレッドセーフな処理ではありません。 列挙処理でスレッド セーフを確保するには、列挙処理が終わるまでコレクションをロックできます。 コレクションに対し複数のスレッドがアクセスして読み取りや書き込みを行うことができるようにするには、独自に同期化を実装する必要があります。
SyncRoot は、 へのアクセスを同期するために使用できる オブジェクトを ICollection返します。 同期は、コレクションにアクセスする前にすべてのスレッドがこのオブジェクトをロックする場合にのみ有効です。 次のコードは、C#、C++、および Visual Basic の プロパティの SyncRoot 使用を示しています。
ICollection ic = ...;
lock (ic.SyncRoot) {
// Access the collection.
}
Dim ic As ICollection = ...
SyncLock ic.SyncRoot
' Access the collection.
End SyncLock
ICollection^ ic = ...;
try {
Monitor::Enter(ic->SyncRoot);
// Access the collection.
}
finally {
Monitor::Exit(ic->SyncRoot);
}
このプロパティ値を取得することは、O(1) 操作になります。
適用対象
こちらもご覧ください
.NET