Teilen über


Array.SyncRoot Eigenschaft

Definition

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

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

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 = gcnew array<Int32> { 1, 2, 4 };
try
{
    Monitor::Enter(myArray->SyncRoot); 
        
    for each (Int32 item in myArray)
        Console::WriteLine(item);
}
finally
{
    Monitor::Exit(myArray->SyncRoot);
}
Array myArray = new int[] { 1, 2, 4 };
lock(myArray.SyncRoot)
{
    foreach (Object item in myArray)
        Console.WriteLine(item);
}
let myArray = [| 1; 2; 4|]
lock myArray.SyncRoot (fun () ->
    for item in myArray do
        printfn $"{item}" )
Dim myArray As Array = New Integer() { 1, 2, 4 }
SyncLock(myArray.SyncRoot) 
    For Each item As Object In myArray
        Console.WriteLine(item)
    Next
End SyncLock

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:

Weitere Informationen