首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET 6 PriorityQueue线程安全吗?

.NET 6 PriorityQueue线程安全吗?
EN

Stack Overflow用户
提问于 2021-11-16 09:55:24
回答 2查看 1K关注 0票数 4

.NET 6现在有了非常有用的PriorityQueue。文档还不是很清楚(在问题发生时,文档仍然是RC1的),如果它是线程安全的或者不是的话。有两件事:

  • 它驻留在System.Collections.Generic中,在System.Collections.Concurrent中似乎没有类似的东西。
  • 它确实有一个名为TryDequeueTryPeek的方法。当然,它们可能只是在队列为空时不会抛出异常的方法,但它确实给人以并发集合的印象。

我可以在没有包装/锁定的多线程环境中使用它(例如,在ASP.NET核心网站中)吗?任何我不知道的并发的对等物(如果可能的话,我尽量不使用第三方包)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-16 09:59:54

例如,通过查看源代码 for PriorityQueue.Enqueue,可以立即看出代码是而不是线程安全的:

代码语言:javascript
复制
public void Enqueue(TElement element, TPriority priority)
{
    // Virtually add the node at the end of the underlying array.
    // Note that the node being enqueued does not need to be physically placed
    // there at this point, as such an assignment would be redundant.

    int currentSize = _size++; // <-- BOOM
票数 12
EN

Stack Overflow用户

发布于 2021-11-16 11:09:36

这份文件还不太清楚

实际上是的。.NET中的任何东西都不是线程安全的,除非文档中明确提到它。句号。

线程安全伴随着(重要的)性能开销,特别是在一般情况下(即不假设特定用途)。因此,让所有线程都“以防万一”是非常愚蠢的。因此,.NET中的一般概念(从1.0开始)认为,除非文档中明确提到线程安全,否则没有什么是线程安全的。

正如您所说,文档中没有提到线程安全。因此,线程安全的问题是非常清楚的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69986983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档