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
Значение свойства
Данное свойство для всех массивов всегда имеет значение 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).