List<T>.ICollection.SyncRoot 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取可用于同步对 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)。