gpt4 book ai didi

c# - System.Collections.Queue、线程、锁定和同步

转载 作者:行者123 更新时间:2023-11-30 16:30:17 25 4
gpt4 key购买 nike

我有一个 Queue<T>由各种线程访问的字段。 Enequeue()每秒从多个线程调用多次,而有一个单个线程执行Dequeue()Count操作。

直到现在我还没有想太多,因为我“安全”地玩了它并使用了 lock在对此队列进行任何操作之前在静态对象上。虽然目前没有任何性能问题,但如果锁是多余的,我想摆脱它们。我的问题是:

  1. 因为我从不遍历队列,在这种情况下真的需要锁吗?我的意思是,当发生一个线程入队和第二个线程出队元素恰好同时发生时,程序会崩溃吗?
  2. 我应该使用Queue.Synchronized()吗?获得包装器,如果是这样:与原始队列相比,这会影响性能吗?

最佳答案

1:是的,它们是必需的;入队和出队都会改变状态;标准队列不是线程安全的

2: ConcurrentQueue<T> 会很好地工作;我个人使用我在 SO 上写的版本,Creating a blocking Queue<T> in .NET? - 它可以很容易地限制队列的大小,并在不循环的情况下进行高效的出列

注意;对于您当前的实现,如果队列是静态的(尽管问题中并不清楚),锁对象只能是静态的 - 否则您所有类似的队列都可能共享一个锁

关于c# - System.Collections.Queue<T>、线程、锁定和同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5789426/

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