次の方法で共有


Dictionary<TKey,TValue>.KeyCollection.ICollection.SyncRoot プロパティ

定義

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

適用対象

こちらもご覧ください