Udostępnij za pośrednictwem


Stack.SyncRoot Właściwość

Definicja

Pobiera obiekt, który może służyć do synchronizowania dostępu do obiektu 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

Wartość właściwości

Element Object , który może służyć do synchronizowania dostępu do elementu Stack.

Implementuje

Uwagi

Aby utworzyć zsynchronizowaną wersję Stackprogramu , użyj Synchronized metody . Jednak klasy pochodne mogą zapewnić własną zsynchronizowaną wersję Stack przy użyciu SyncRoot właściwości . Synchronizowanie kodu musi wykonywać operacje na obiekcie SyncRootStack, a nie bezpośrednio w obiekcie Stack. Zapewnia to właściwą operację kolekcji, które pochodzą z innych obiektów. W szczególności utrzymuje właściwą synchronizację z innymi wątkami, które mogą być jednocześnie modyfikowane obiektu Stack .

Wyliczanie za pośrednictwem kolekcji nie jest wewnętrznie procedurą bezpieczną wątkowo. Nawet w przypadku synchronizacji kolekcji inne wątki nadal mogą modyfikować kolekcję, co powoduje zgłoszenie wyjątku przez moduł wyliczający. Aby zagwarantować bezpieczeństwo wątków podczas wyliczania, możesz zablokować kolekcję podczas całego wyliczenia lub przechwycić wyjątki wynikające ze zmian wprowadzonych przez inne wątki.

W poniższym przykładzie kodu pokazano, jak zablokować kolekcję przy użyciu SyncRoot elementu w trakcie całego wyliczenia.

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

Pobieranie wartości tej właściwości jest operacją O(1) .

Dotyczy