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());它们将帮助指导您编写实际上是线程安全的代码。
这被称为成功的坑。
有关更多信息,请参阅我的博客