【问题标题】:Why doesn't Collections.Generic.Queue have Synchronized method but Collections.Queue has?为什么 Collections.Generic.Queue 没有 Synchronized 方法但 Collections.Queue 有?
【发布时间】:2013-01-03 23:23:22
【问题描述】:

System.Collections.Queue 类有 Queue.Synchronized 方法,它返回一个线程安全的队列实现。

但是通用的System.Collections.Generic.Queue 没有Synchronized 方法。在这一点上,我有两个问题:

  1. 为什么泛型没有这种方法?这是一个框架 API 设计决策吗?
  2. Queue.Synchronized 返回的队列与ConcurrentQueue<T> 类有何不同?

谢谢。

【问题讨论】:

    标签: c# collections generic-collections concurrent-collections


    【解决方案1】:

    Synchronized() 方法返回一个包装队列,该队列为每个方法加锁。
    在编写多线程应用程序时,这种模式实际上没有用。

    大多数现实世界的使用模式不会受益于同步集合;他们仍然需要锁定更高级别的操作。

    因此,System.Collections 中的 Synchronized() 方法实际上是一个陷阱,会导致人们编写非线程安全的代码。


    ConcurrentQueue<T> 类是专门为并发应用程序设计的,它包含原子地修改队列的有用方法。

    并发集合包仅包含在多线程环境中有意义的方法(例如,TryDequeue());他们将帮助指导您编写实际上是线程安全的代码。

    这称为pit of success

    有关更多信息,请参阅my blog

    【讨论】:

    • 如果您能回答我上面的第一个问题,我将不胜感激。谢谢!
    猜你喜欢
    • 2012-01-04
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    相关资源
    最近更新 更多