gpt4 book ai didi

c# - 为什么 Collections.Generic.Queue 没有 Synchronized 方法而 Collections.Queue 有?

转载 作者:太空狗 更新时间:2023-10-29 21:02:09 24 4
gpt4 key购买 nike

System.Collections.Queue类(class)有 Queue.Synchronized 返回线程安全队列实现的方法。

但是通用的,System.Collections.Generic.Queue没有 Synchronized方法。此时我有两个问题:

  1. 为什么通用的没有这个方法?它是框架 API 设计决策吗?
  2. 队列是如何从 Queue.Synchronized 返回的不同于 ConcurrentQueue<T> 上课?

谢谢。

最佳答案

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

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

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


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

并发集合包只包含在多线程环境中使用有意义的方法(例如,TryDequeue());它们将帮助指导您编写真正线程安全的代码。

这叫做 pit of success .

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

关于c# - 为什么 Collections.Generic.Queue 没有 Synchronized 方法而 Collections.Queue 有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14148938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com