Array.SyncRoot Свойство

Определение

Получает объект, с помощью которого можно синхронизировать доступ к коллекции Array.Gets an object that can be used to synchronize access to the Array.

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

Значение свойства

Объект, который может использоваться для синхронизации доступа к Array.An object that can be used to synchronize access to the Array.

Реализации

Примеры

В следующем примере кода показано, как заблокировать массив во время перечисления во всем перечислении с помощью свойства SyncRoot.The following code example shows how to lock an array during the entire enumeration by using the SyncRoot property.

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);
}
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

Комментарии

Это свойство реализует интерфейс System.Collections.ICollection.This property implements the System.Collections.ICollection interface.

.NET Framework классы, основанные на Array, предоставляют собственную синхронизированную версию коллекции с помощью свойства SyncRoot..NET Framework classes based on Array provide their own synchronized version of the collection using the SyncRoot property.

Классы, использующие массивы, могут также реализовать собственную синхронизацию с помощью свойства SyncRoot.Classes that use arrays can also implement their own synchronization using the SyncRoot property. Синхронизирующий код должен выполнять операции с SyncRoot коллекции, а не непосредственно в коллекции.The synchronizing code must perform operations on the SyncRoot of the collection, not directly on the collection. Это обеспечивает правильную работу коллекций, являющихся производными других объектов.This ensures proper operation of collections that are derived from other objects. В частности, он поддерживает правильную синхронизацию с другими потоками, которые могут одновременно изменять коллекцию.Specifically, it maintains proper synchronization with other threads that might be simultaneously modifying the collection. Обратите внимание, что некоторые реализации SyncRoot могут возвращать Array.Note that some implementations of SyncRoot might return the Array itself.

Перечисление по коллекции не является потокобезопасной процедурой.Enumerating through a collection is intrinsically not a thread safe procedure. Даже если коллекция синхронизирована, другие потоки могут ее изменить, что приведет к тому, что перечислитель создаст исключение.Even when a collection is synchronized, other threads can still modify the collection, which causes the enumerator to throw an exception. Для обеспечения потокобезопасности при перечислении можно либо заблокировать коллекцию на все время перечисления, либо перехватывать исключения, возникающие в результате изменений, внесенных другими потоками.To guarantee thread safety during enumeration, you can either lock the collection during the entire enumeration or catch the exceptions resulting from changes made by other threads.

Получение значения данного свойства является операцией порядка сложности O(1).Retrieving the value of this property is an O(1) operation.

Применяется к

Дополнительно