来自MSDN文档:
“Synchronized支持多个写入线程,前提是没有线程正在读取Hashtable。同步包装器在一个或多个读取器和一个或多个写入器的情况下不提供线程安全访问。”
来源: http://msdn.microsoft.com/en-us/library/system.collections.hashtable.synchronized.aspx
听起来我仍然需要使用锁,所以我的问题是为什么我们会使用Hashtable.Synchronized呢?
答案 0 :(得分:3)
出于同样的原因,有不同级别的DB事务。您可能会担心写入是有保证的,但不要介意读取陈旧/可能不好的数据。
<小时/> 编辑我注意到他们的具体示例是枚举器。他们无法在包装器中处理这种情况,因为如果你提前从枚举中断,那么包装类就无法知道它可以释放它的锁。
不要考虑计数器的情况。多个线程可以增加表中的值,并且您希望显示计数的值。如果您显示1,200,453并且计数实际为1,200,454并不重要 - 您只需将其关闭即可。但是,您不希望数据损坏。这是一种线程安全对写入很重要但不是读取的情况。
答案 1 :(得分:1)
对于您可以保证在写入数据结构时没有读者访问数据结构(或者您不在乎读取错误数据)的情况。例如,在不继续修改结构的情况下,但是您稍后必须访问的一次性计算,虽然足够大,可以保证许多线程写入它。
答案 2 :(得分:0)
当你在一个线程上读取哈希表(读取)并且存在可以向/从中添加/删除项目的其他线程(写入)时,你会需要它...