CAS操作引起链表删除的问题

如果要删除p->next节点,一种简单的方式是使用原子操作更改p->next值。但是,如果其它线程正在修改p->next节点,会导致链表进入错误状态,如下图:

list_cas_delete_problem.png

如果一个线程删除节点B,同时另一个线程通过节点B,删除节点C,随后将C delete掉,整个链表进入错误状态。
维基百科上Harris's solution给出了另一种错误状态:
https://en.wikipedia.org/wiki/Non-blocking_linked_list

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文是我自己在秋招复习时的读书笔记,整理的知识点,也是为了防止忘记,尊重劳动成果,转载注明出处哦!如果你也喜欢,那...
    波波波先森阅读 11,371评论 4 56
  • 转载自:https://halfrost.com/go_map_chapter_one/ https://half...
    HuJay阅读 6,225评论 1 5
  • Java继承关系初始化顺序 父类的静态变量-->父类的静态代码块-->子类的静态变量-->子类的静态代码快-->父...
    第六象限阅读 2,176评论 0 9
  • 我看了馋得直流口水,迫不及待地摘了一个,管他三七二十一剥开皮,就吃了起来,香甜可口的橘子一到嘴里,凉凉的,甜甜的,...
    星宇陶阅读 184评论 0 4
  • 今天这篇文章算是一篇命题作文,来自我长期的读者@晓燕同学的要求。某一日她在后台问我要怎么拍出好照片,问我能不能写一...
    岛屿书阅读 1,240评论 6 36