为什么Collections.Generic.Queue没有Synchronized方法但Collections.Queue有?

Ahm*_*gle 6 c# collections generic-collections concurrent-collections

System.Collections.Queueclass具有Queue.Synchronized返回线程安全的Queue实现的方法.

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

  1. 为什么通用的没有这种方法?它是一个框架API设计决策吗?
  2. 返回的队列 Queue.SynchronizedConcurrentQueue<T>类不同?

谢谢.

SLa*_*aks 13

Synchronized()方法返回一个包装器队列,该队列绕每个方法锁定一个锁.
在编写多线程应用程序时,此模式实际上并不实用.

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

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


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

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

这被称为成功的关键.

有关更多信息,请参阅我的博客