看了MSDN[中文]好几篇,没太懂,存在一些问题,请教一下:
1.Hashtable.Synchronized(new Hashtable)创建的Hashtable可以保证Add,Update,Remove方法正确同步吗?
2.锁定Hashtable本身和锁定Hashtable.SyncRoot有什么区别?
3.安全的遍历Hashtable需要锁定Hashtable.SyncRoot?

解决方案 »

  1.   

    自己又看了一些,自己做出了一些理想:
    1.Hashtable.Synchronized(new Hashtable)创建的Hashtable在进行Add,Update,Remove操作时会锁住Hashtable.SyncRoot。
    2.锁Hashtable本身和锁定Hashtable.SyncRoot本身是一样的。只不过Hashtable本身在Add,Update,Remove时会锁Hashtable.SyncRoot(Synchronized后的),所以锁Hashtable.SyncRoot可以减少自己手动的一些控制。
    3.要想安全的话就需要锁定。
      

  2.   

    我认为lock( myCollection.SyncRoot ) 和lock(myCollection)是一样的,不明白为什么要多此一举,看到MSDN上有这么一句:
    同步代码必须在 Hashtable 的 SyncRoot 上执行操作,而不是直接在 Hashtable 上执行. 看样子微软建议使用lock( myCollection.SyncRoot ).
      

  3.   

    lock( myCollection.SyncRoot )和lock(myCollection)的区别MSDN上说了,是前者可以用于派生类的同步访问,而后者不可以。而Hashtable.Synchronized()是线程安全的同步。
      

  4.   

    按MSDN的意思应该如此,有待试验。MSDN也会出错:)如果是多线程访问,任一线程中任一方法没有使用lock(hashtable.SyncRoot),都有可能会出错。(验证过)看MSDN的意思用Hashtable.Synchronized应该是最安全的,不过代价应该也最大。(未验证)