无锁单写入多读者列表的实现细节

时间:2015-02-25 04:18:40

标签: c++ algorithm lock-free

我试图理解在

中找到的单作者多阅读器双向链表的实现

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指针设置的机制,因为没有任何其他方法。
  5. 我认为我的基本问题归结为双指针中的内部指针指向什么?

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

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

1 个答案:

答案 0 :(得分:1)

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