Hashtable.SyncRoot 属性

定义

获取可用于同步对 Hashtable 的访问的对象。

public:
 virtual property System::Object ^ SyncRoot { System::Object ^ get(); };
public virtual object SyncRoot { get; }
member this.SyncRoot : obj
Public Overridable ReadOnly Property SyncRoot As Object

属性值

Object

用于同步对 Hashtable 的访问的对象。

实现

注解

若要创建同步版本 Hashtable,请使用 Synchronized 该方法。 但是,派生类可以提供其自己的使用属性的HashtableSyncRoot同步版本。 同步代码必须对 SyncRoot 操作 Hashtable执行操作,而不是直接对 Hashtable操作。 这样可确保对从其他对象派生的集合正确地执行操作。 具体而言,它与可能同时修改 Hashtable 对象的其他线程保持适当的同步。

通过集合进行枚举本质上不是线程安全过程。 即使某个集合已同步,其他线程仍可以修改该集合,这会导致枚举数引发异常。 若要确保枚举过程中的线程安全性,可以在整个枚举期间锁定集合,或者捕获由其他线程进行的更改所导致的异常。

下面的代码示例演示如何使用 SyncRoot 整个枚举期间锁定集合:

Hashtable^ myCollection = gcnew Hashtable();
bool lockTaken = false;

try
{
    Monitor::Enter(myCollection->SyncRoot, lockTaken);
    for each (Object^ item in myCollection)
    {
        // Insert your code here.
    }
}
finally
{
    if (lockTaken)
    {
        Monitor::Exit(myCollection->SyncRoot);
    }
}
var myCollection = new Hashtable();
lock (myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}
Dim myCollection As New Hashtable()
SyncLock myCollection.SyncRoot
    For Each item In myCollection
        ' Insert your code here.
    Next
End SyncLock

适用于

另请参阅