Auf Englisch lesen

Freigeben über


Array.SyncRoot Eigenschaft

Definition

Ruft ein Objekt ab, mit dem der Zugriff auf Array synchronisiert werden kann.

public object SyncRoot { get; }
public virtual object SyncRoot { get; }

Eigenschaftswert

Ein Objekt, mit dem der Zugriff auf Array synchronisiert werden kann.

Implementiert

Beispiele

Das folgende Codebeispiel zeigt, wie ein Array während der gesamten Enumeration mit der SyncRoot -Eigenschaft gesperrt wird.

Array myArray = new int[] { 1, 2, 4 };
lock(myArray.SyncRoot)
{
    foreach (Object item in myArray)
        Console.WriteLine(item);
}

Hinweise

Diese Eigenschaft implementiert die System.Collections.ICollection Schnittstelle.

.NET-Klassen basierend auf Array der Bereitstellung einer eigenen synchronisierten Version der Auflistung mithilfe der SyncRoot -Eigenschaft.

Klassen, die Arrays verwenden, können auch ihre eigene Synchronisierung mithilfe der SyncRoot -Eigenschaft implementieren. Der Synchronisierungscode muss Vorgänge für die SyncRoot -Auflistung und nicht direkt für die Auflistung ausführen. Dies gewährleistet die einwandfreie Funktion von Auflistungen, die von anderen Objekten abgeleitet sind. Insbesondere behält sie eine ordnungsgemäße Synchronisierung mit anderen Threads bei, die die Auflistung möglicherweise gleichzeitig ändern. Beachten Sie, dass einige Implementierungen von SyncRoot möglicherweise den Array selbst zurückgeben.

Das Aufzählen durch eine Auflistung ist grundsätzlich keine threadsichere Prozedur. Selbst wenn eine Auflistung synchronisiert wird, besteht die Möglichkeit, dass andere Threads sie ändern. Dies führt dazu, dass der Enumerator eine Ausnahme auslöst. Um während der Enumeration Threadsicherheit zu gewährleisten, können Sie entweder die Auflistung während der gesamten Enumeration sperren oder die Ausnahmen, die aus von anderen Threads stammenden Änderungen resultieren, abfangen.

Das Abrufen des Werts dieser Eigenschaft ist ein O(1)-Vorgang.

Gilt für:

Produkt Versionen
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

Weitere Informationen