线程同步Hashtable问题

hainang1234 2006-01-11 12:33:39
看了MSDN[中文]好几篇,没太懂,存在一些问题,请教一下:
1.Hashtable.Synchronized(new Hashtable)创建的Hashtable可以保证Add,Update,Remove方法正确同步吗?
2.锁定Hashtable本身和锁定Hashtable.SyncRoot有什么区别?
3.安全的遍历Hashtable需要锁定Hashtable.SyncRoot?
...全文
398 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
linfengcyl 2006-01-12
  • 打赏
  • 举报
回复
按MSDN的意思应该如此,有待试验。MSDN也会出错:)

如果是多线程访问,任一线程中任一方法没有使用lock(hashtable.SyncRoot),都有可能会出错。(验证过)

看MSDN的意思用Hashtable.Synchronized应该是最安全的,不过代价应该也最大。(未验证)
lostowner 2006-01-12
  • 打赏
  • 举报
回复
学习
lidong6 2006-01-12
  • 打赏
  • 举报
回复
那就是说如果不派生类的话应该就一样了.
hainang1234 2006-01-11
  • 打赏
  • 举报
回复
自己又看了一些,自己做出了一些理想:
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.要想安全的话就需要锁定。
linfengcyl 2006-01-11
  • 打赏
  • 举报
回复
lock( myCollection.SyncRoot )和lock(myCollection)的区别MSDN上说了,是前者可以用于派生类的同步访问,而后者不可以。而Hashtable.Synchronized()是线程安全的同步。
lidong6 2006-01-11
  • 打赏
  • 举报
回复
我认为lock( myCollection.SyncRoot ) 和lock(myCollection)是一样的,不明白为什么要多此一举,看到MSDN上有这么一句:
同步代码必须在 Hashtable 的 SyncRoot 上执行操作,而不是直接在 Hashtable 上执行. 看样子微软建议使用lock( myCollection.SyncRoot ).

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧