Array.SyncRoot Eigenschap
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee haalt u een object op dat kan worden gebruikt om de toegang tot het Arrayobject te synchroniseren.
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
Waarde van eigenschap
Een object dat kan worden gebruikt om de toegang tot de Array.
Implementeringen
Voorbeelden
In het volgende codevoorbeeld ziet u hoe u een matrix vergrendelt tijdens de gehele inventarisatie met behulp van de SyncRoot eigenschap.
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
Opmerkingen
Met deze eigenschap wordt de System.Collections.ICollection interface geïmplementeerd.
.NET klassen op basis van Array hun eigen gesynchroniseerde versie van de verzameling bieden met behulp van de eigenschap SyncRoot.
Klassen die matrices gebruiken, kunnen ook hun eigen synchronisatie implementeren met behulp van de SyncRoot eigenschap. De synchronisatiecode moet bewerkingen uitvoeren op de SyncRoot verzameling, niet rechtstreeks op de verzameling. Dit zorgt voor de juiste werking van verzamelingen die zijn afgeleid van andere objecten. Het onderhoudt met name de juiste synchronisatie met andere threads die mogelijk tegelijkertijd de verzameling wijzigen. Houd er rekening mee dat sommige implementaties van SyncRoot het zelf mogelijk het Array zelf retourneren.
Het inventariseren via een verzameling is intrinsiek geen threadveilige procedure. Zelfs wanneer een verzameling wordt gesynchroniseerd, kunnen andere threads de verzameling nog steeds wijzigen, waardoor de enumerator een uitzondering genereert. Om de veiligheid van threads tijdens de inventarisatie te garanderen, kunt u de verzameling vergrendelen tijdens de volledige inventarisatie of de uitzonderingen ondervangen die het gevolg zijn van wijzigingen die door andere threads zijn aangebracht.
Het ophalen van de waarde van deze eigenschap is een O(1)-bewerking.