来自 MSDN 文档:
“Synchronized 支持多个写入线程,前提是没有线程正在读取哈希表。在一个或多个读取器和一个或多个写入器的情况下,同步包装器不提供线程安全访问。”
来源: http://msdn.microsoft.com/en-us/library/system.collections.hashtable.synchronized.aspx
听起来我仍然必须使用锁,所以我的问题是我们为什么要使用 Hashtable.Synchronized?
最佳答案
出于同样的原因,存在不同级别的数据库事务。您可能关心写入是否有保证,但不介意读取陈旧/可能错误的数据。
编辑 我注意到他们的具体示例是枚举器。他们不能在他们的包装器中处理这种情况,因为如果你提前中断枚举,包装器类将无法知道它可以释放它的锁。
想想计数器的情况。多个线程可以在表中增加一个值,而你想要显示计数的值。如果您显示 1,200,453 而计数实际上是 1,200,454 并不重要 - 您只需要关闭它即可。但是,您不希望数据损坏。在这种情况下,线程安全对写入很重要,但对读取不重要。
关于c# - 为什么要使用 Hashtable.Synchronized?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/240906/