代码之家  ›  专栏  ›  技术社区  ›  makstaks

为什么使用hashtable.synchronized?

  •  4
  • makstaks  · 技术社区  · 16 年前

    来自msdn文档:

    “如果没有线程正在读取哈希表,则synchronized支持多个写入线程。在一个或多个读卡器和一个或多个写入程序的情况下,同步包装器不提供线程安全访问。”

    来源: http://msdn.microsoft.com/en-us/library/system.collections.hashtable.synchronized.aspx

    听起来我仍然需要使用锁,所以我的问题是为什么我们要使用hashtable.synchronized?

    3 回复  |  直到 15 年前
        1
  •  3
  •   Chris Marasti-Georg Scott Weinstein    16 年前

    出于同样的原因,有不同级别的DB事务。您可能关心保证写入,但不介意读取过时/可能是坏数据。


    编辑 我注意到他们的具体示例是一个枚举器。他们无法在包装器中处理这种情况,因为如果您提前脱离枚举,包装器类将无法知道它可以释放锁。

    思考而不是柜台的情况。多个线程可以增加表中的值,并且您希望显示计数的值。显示1200453和计数实际上是1200454并不重要-您只需要关闭它。但是,您不希望数据损坏。在这种情况下,线程安全对于写入非常重要,而不是读取。

        2
  •  1
  •   Vinko Vrsalovic    16 年前

    对于这样的情况,您可以保证在写入数据结构时(或在您不关心读取错误数据时),没有读卡器可以访问该数据结构。例如,如果结构没有不断地被修改,而是一次计算,稍后您将不得不访问它,尽管它足够大,可以保证许多线程写入它。

        3
  •  0
  •   ehosca    15 年前

    当您要在一个线程上的哈希表上进行交互(读取),并且存在其他线程可以向其中添加/删除项(写入),则需要它…