Array.IsSynchronized Свойство

Определение

Возвращает значение, показывающее, является ли доступ к коллекции Array синхронизированным (потокобезопасным).

public:
 property bool IsSynchronized { bool get(); };
public:
 virtual property bool IsSynchronized { bool get(); };
public bool IsSynchronized { get; }
public virtual bool IsSynchronized { get; }
member this.IsSynchronized : bool
Public ReadOnly Property IsSynchronized As Boolean
Public Overridable ReadOnly Property IsSynchronized As Boolean

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

Boolean

Данное свойство для всех массивов всегда имеет значение false.

Реализации

Примеры

В следующем примере кода показано, как заблокировать массив во время всего перечисления с помощью SyncRoot свойства.

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

Комментарии

ArrayIsSynchronized реализует свойство, так как оно требуется интерфейсомSystem.Collections.ICollection.

.NET классов на Array основе предоставления собственной синхронизированной версии коллекции с помощью SyncRoot свойства.

Классы, использующие массивы, также могут реализовать собственную синхронизацию SyncRoot с помощью свойства. Синхронизированный код должен выполнять операции с SyncRoot коллекцией, а не непосредственно в коллекции. Это обеспечивает правильную работу коллекций, являющихся производными других объектов. В частности, она поддерживает правильную синхронизацию с другими потоками, которые могут одновременно изменять коллекцию. Обратите внимание, что некоторые реализации SyncRoot могут возвращать Array сам себя.

Перечисление через коллекцию по сути не является потокобезопасной процедурой. Даже если коллекция синхронизирована, другие потоки могут ее изменить, что приведет к тому, что перечислитель создаст исключение. Для обеспечения потокобезопасности при перечислении можно либо заблокировать коллекцию на все время перечисления, либо перехватывать исключения, возникающие в результате изменений, внесенных другими потоками.

Получение значения данного свойства является операцией порядка сложности O(1).

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

См. также раздел