System.Collections.Queue
类具有Queue.Synchronized
返回线程安全队列实现的方法。
但是通用的,System.Collections.Generic.Queue
没有Synchronized
方法。在这一点上,我有两个问题:
- 为什么通用的没有这种方法?这是一个框架 API 设计决策吗?
- 返回的队列
Queue.Synchronized
与类有何不同ConcurrentQueue<T>
?
谢谢。
System.Collections.Queue
类具有Queue.Synchronized
返回线程安全队列实现的方法。
但是通用的,System.Collections.Generic.Queue
没有Synchronized
方法。在这一点上,我有两个问题:
Queue.Synchronized
与类有何不同ConcurrentQueue<T>
?谢谢。
该Synchronized()
方法返回一个包装队列,该队列在每个方法周围都加了一个锁。
在编写多线程应用程序时,这种模式实际上没有用。
大多数现实世界的使用模式不会受益于同步集合;他们仍然需要锁定更高级别的操作。
因此,其中的Synchronized()
方法System.Collections
实际上是一个陷阱,导致人们编写非线程安全的代码。
该类ConcurrentQueue<T>
是专门为并发应用程序设计的,并包含以原子方式修改队列的有用方法。
并发集合包只包含在多线程环境中有意义的方法(例如,TryDequeue()
);它们将帮助指导您编写实际上是线程安全的代码。
这被称为成功的坑。
有关更多信息,请参阅我的博客