【问题标题】:Lock free non-allocating collection无锁非分配集合
【发布时间】:2019-04-18 08:19:53
【问题描述】:

我正在寻找一个 collection 数据结构,它是:

  1. 线程安全
  2. 无锁
  3. 非分配(摊销或预分配都可以)
  4. 非侵入式
  5. 不使用外来内在函数

元素顺序无关紧要。堆栈,队列,袋子,什么都可以。我找到了很多满足这五个要求中的四个的例子,例如:

  • .NET 的 List 不是线程安全的。
  • 如果我在其上放置互斥体,则它不是无锁的。
  • .NET 的ConcurrentStack 是线程安全的、无锁的,使用简单的CompareExchange,但为每个元素分配一个新的Node
  • 如果我将 next 指针从 Node 移动到元素本身,那么它就是侵入性的。
  • Array based lock free data structures 往往需要多字内在函数。

我觉得我错过了一些非常明显的东西。这应该是一个已解决的问题。

【问题讨论】:

    标签: collections pool intrinsics lock-free


    【解决方案1】:
    • .NET 的ConcurrentQueue 满足所有五个要求。它会在后备存储空间不足时进行分配,类似于List<T>,但只要有额外的容量,就不会发生分配。不幸的是,预先预留额外容量的唯一方法是使用相同大小的集合对其进行初始化,然后将所有元素出队。
    • .NET 的ConcurrentBag 也是如此

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-10
      • 2013-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2015-09-12
      • 1970-01-01
      相关资源
      最近更新 更多