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

你可能感兴趣的:(CAS操作引起链表删除的问题)