Поделиться через


List<T>.ICollection.SyncRoot Свойство

Определение

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

property System::Object ^ System::Collections::ICollection::SyncRoot { System::Object ^ get(); };
object System.Collections.ICollection.SyncRoot { get; }
member this.System.Collections.ICollection.SyncRoot : obj
 ReadOnly Property SyncRoot As Object Implements ICollection.SyncRoot

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

Объект, который может быть использован для синхронизации доступа к коллекции ICollection. В используемой по умолчанию реализации List<T> это свойство всегда возвращает текущий экземпляр.

Реализации

Комментарии

Используемые по умолчанию реализации коллекций в пространстве имен System.Collections.Generic не синхронизированы.

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

SyncRoot возвращает объект , который можно использовать для синхронизации доступа к объекту ICollection. Синхронизация действует только в том случае, если все потоки блокируют этот объект перед доступом к коллекции. В следующем коде показано использование SyncRoot свойства для C#, C++ и Visual Basic.

ICollection ic = ...;
lock (ic.SyncRoot)
{
    // Access the collection.
}
Dim ic As ICollection = ...
SyncLock ic.SyncRoot
    ' Access the collection.
End SyncLock
ICollection^ ic = ...;
try
{
    Monitor::Enter(ic->SyncRoot);
    // Access the collection.
}
finally
{
    Monitor::Exit(ic->SyncRoot);
}

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

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

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