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


Queue<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. В используемой по умолчанию реализации Queue<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).

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

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