Array.SyncRoot Vlastnost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Získá objekt, který lze použít k synchronizaci přístupu k .Array
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
Hodnota vlastnosti
Objekt, který lze použít k synchronizaci přístupu k objektu Array.
Implementuje
Příklady
Následující příklad kódu ukazuje, jak uzamknout pole během celého výčtu SyncRoot pomocí vlastnosti.
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
Poznámky
Tato vlastnost implementuje System.Collections.ICollection rozhraní.
Třídy .NET založené na tom, že Array poskytují vlastní synchronizovanou verzi kolekce pomocí SyncRoot vlastnosti.
Třídy, které používají pole, mohou také implementovat vlastní synchronizaci pomocí SyncRoot vlastnosti. Synchronizační kód musí provádět operace s SyncRoot
kolekcí, nikoli přímo v kolekci. Tím zajistíte správnou funkci kolekcí, které jsou odvozeny z jiných objektů. Konkrétně udržuje správnou synchronizaci s jinými vlákny, která mohou současně upravovat kolekci. Upozorňujeme, že některé implementace SyncRoot můžou vrátit samotnou implementaci Array .
Výčet prostřednictvím kolekce není vnitřně bezpečný postup vlákna. I v případě, že jde o synchronizovanou kolekci, mohou úpravy provádět i ostatní vlákna, což způsobuje vyvolání výjimky enumerátorem. K zaručení bezpečnosti přístupu z více vláken můžete buďto zamknout kolekci na celou dobu práce s výčtem, nebo zachycovat výjimky vzniklé v důsledku změn prováděných ostatními vlákny.
Načtení hodnoty této vlastnosti je operace O(1).