关于头插法代码示例的不理解的地方

来源:4-12 AQS之面试官:讲讲CLH队列的原理

慕粉4331336

2021-03-26

图片描述

如上图代码,insert方法首先将每个节点的next指向原来head,如果两个线程同时进来,但是head都是两个新节点来之前的head,那么先会形成如下的结构

图片描述

之后,两个线程进行CAS操作,维护Head的引用,把头节点的指针维护到自己上,这样会不会形成这样的结构

图片描述

这样是不是有问题呀,维护的不是队列了,结构乱了

写回答

1回答

求老仙

2021-03-26

感谢同学发现了我的一处错误:

do {
  newNode.next = head;
}while(!cas(&head, head, newNode);

如果cas竞争失败, 每个线程需要不断更新newNode.next,这样保证newNode.next指向了最新的head。

1
1
慕粉4331336
老师回复好快,明白了,谢谢老师
2021-03-26
共1条回复

笑傲Java面试 剖析大厂高频面试真题 秒变offer收割机

深度剖析大厂面试高频真题,让你秒变offer收割机

1783 学习 · 314 问题

查看课程