关于头插法代码示例的不理解的地方
来源:4-12 AQS之面试官:讲讲CLH队列的原理

慕粉4331336
2021-03-26
如上图代码,insert方法首先将每个节点的next指向原来head,如果两个线程同时进来,但是head都是两个新节点来之前的head,那么先会形成如下的结构
之后,两个线程进行CAS操作,维护Head的引用,把头节点的指针维护到自己上,这样会不会形成这样的结构
这样是不是有问题呀,维护的不是队列了,结构乱了
写回答
1回答
-
感谢同学发现了我的一处错误:
do { newNode.next = head; }while(!cas(&head, head, newNode);
如果cas竞争失败, 每个线程需要不断更新newNode.next,这样保证newNode.next指向了最新的head。
112021-03-26
相似问题