无锁非分配集合

时间:2019-04-18 08:19:53

标签: collections pool intrinsics lock-free

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

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

元素顺序无关紧要。堆放,排队,装袋,一切都很好。我发现很多示例可以满足这五个要求中的四个要求,例如:

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

我觉得我缺少一些显而易见的东西。这应该是一个解决的问题。

1 个答案:

答案 0 :(得分:0)

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