c – 遍历带有危险指针的列表

前端之家收集整理的这篇文章主要介绍了c – 遍历带有危险指针的列表前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用Hazard指针,以便在C中实现无锁链接列表.
除了各种基本队列和堆栈之外,我找不到任何示例代码.
问题是我需要遍历列表,所以我的问题是我是否可以在分配后更改危险指针的值.
例如:
t←Top
while(true) {
    if t=null then
        return null
    *hp←t
    if Top!=t then
        continue
    ...
    t←(t→next) //after this instruction pointer t will be still protected?
}

解决方法

最后,我根据 the original paper结束了我自己版本的危险指针(HP).我的问题的答案是否定的,不再使用安全.原因是,HP工作的方式,* hp在您将其声明为危险指针时保护被t指向的节点,因此当t移动到下一个节点时,HP机制会继续保护前一个节点.在我可以安全使用之前,我必须将新值重新分配给* hp.

此外,在纸张的示例中,它并不明确,但是当您使用危险指针时,您必须释放它.这意味着,将* hp返回到其原始状态(NULL).这样,如果另一个线程想要删除(退出)该节点,它将不会被视为被使用.

在上面的例子中,我必须在离开方法之前释放* hp.在循环内部没有必要,因为我覆盖了相同的* hp位置(* hp←t),因此前一个节点不再受到保护.

猜你在找的C&C++相关文章