【问题标题】:Implementation detail of lock-free single-writer multi-reader list无锁单写多读列表的实现细节
【发布时间】:2015-02-25 22:24:02
【问题描述】:

我正在尝试了解在

中找到的单写多读双向链表的实现

http://web.cecs.pdx.edu/~walpole/class/cs510/papers/11.pdf

在 pdf 的第 10 页(或期刊文章的 500 页)。

我无法理解插入和删除功能的工作原理

我的理解是

  1. 传入了一个双指针。内部指针大概是我通常称为左链接的地址。
  2. 出于某种原因,Next 指针(我通常称之为右链接)被设置为包含在双指针中的地址。
  3. 对 (next != null) 的调用让我非常困惑,好像 next 为 null 然后指向 Previous 的双指针不提供返回链接
  4. 节点指针存储在双指针中。这必须是设置Previous节点Next指针的机制,因为没有任何其他方法。

我认为我的基本问题归结为双指针中的内部指针指向什么?

如果第 1 行取消引用 Previous 并使用 Previous.Next 分配给 Next 并且如果第 4 行已将 next.Prev 设置为具有要插入节点的地址的指针,那么事情可能对我有意义,但即便如此它仍然似乎不正确。

标记问题 C++,因为伪代码语法最接近 C++,带有一些 Pascal。如果这个问题更适合 cs.stackexchange 请重新定位它。

【问题讨论】:

    标签: c++ algorithm lock-free


    【解决方案1】:

    Prev 成员不是指向前一个节点,而是指向前一个节点的 Next 成员。这有点奇怪,但也许它节省了一些算术,因为我们在前向遍历期间只查看Key 成员,并且不必为列表头分配整个节点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-12
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多