Array.SyncRoot Properti
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mendapatkan objek yang dapat digunakan untuk menyinkronkan akses ke 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
Nilai Properti
Objek yang dapat digunakan untuk menyinkronkan akses ke Array.
Penerapan
Contoh
Contoh kode berikut menunjukkan cara mengunci array selama seluruh enumerasi dengan menggunakan SyncRoot properti .
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
Keterangan
Properti ini mengimplementasikan System.Collections.ICollection antarmuka.
Kelas .NET berdasarkan menyediakan versi koleksi yang disinkronkan Array sendiri menggunakan SyncRoot properti .
Kelas yang menggunakan array juga dapat menerapkan sinkronisasi mereka sendiri menggunakan SyncRoot properti . Kode sinkronisasi harus melakukan operasi pada SyncRoot koleksi, bukan langsung pada koleksi. Ini memastikan pengoperasian koleksi yang tepat yang berasal dari objek lain. Secara khusus, ini mempertahankan sinkronisasi yang tepat dengan utas lain yang mungkin secara bersamaan memodifikasi koleksi. Perhatikan bahwa beberapa implementasi SyncRoot mungkin mengembalikan dirinya Array sendiri.
Menghitung melalui koleksi secara intrinsik bukan prosedur aman utas. Bahkan ketika koleksi disinkronkan, utas lain masih dapat memodifikasi koleksi, yang menyebabkan enumerator melemparkan pengecualian. Untuk menjamin keamanan utas selama enumerasi, Anda dapat mengunci koleksi selama seluruh enumerasi atau menangkap pengecualian yang dihasilkan dari perubahan yang dibuat oleh utas lain.
Mengambil nilai properti ini adalah operasi O(1).