次の方法で共有


Stack.SyncRoot プロパティ

定義

Stackへのアクセスを同期するために使用できるオブジェクトを取得します。

public:
 virtual property System::Object ^ SyncRoot { System::Object ^ get(); };
public virtual object SyncRoot { get; }
member this.SyncRoot : obj
Public Overridable ReadOnly Property SyncRoot As Object

プロパティ値

Stackへのアクセスを同期するために使用できるObject

実装

注釈

Stackの同期バージョンを作成するには、Synchronized メソッドを使用します。 ただし、派生クラスは、SyncRoot プロパティを使用して、独自の同期バージョンのStackを提供できます。 同期するコードは、Stackで直接ではなく、StackSyncRootに対して操作を実行する必要があります。 これにより、他のオブジェクトから派生したコレクションの適切な操作が保証されます。 具体的には、 Stack オブジェクトを同時に変更している可能性がある他のスレッドとの適切な同期を維持します。

コレクションを列挙することは、本質的にスレッド セーフなプロシージャではありません。 コレクションが同期されている場合でも、他のスレッドはコレクションを変更できるため、列挙子は例外をスローします。 列挙中のスレッド セーフを保証するには、列挙全体の間にコレクションをロックするか、他のスレッドによって行われた変更によって発生する例外をキャッチします。

次のコード例は、列挙体全体で SyncRoot を使用してコレクションをロックする方法を示しています。

Stack myCollection = new Stack();

lock (myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}
Dim myCollection As New Stack()

SyncLock myCollection.SyncRoot
    For Each item As Object In myCollection
        ' Insert your code here.
    Next item
End SyncLock

このプロパティの値の取得は、 O(1) 操作です。

適用対象