在pop()方法的49行 head.compareAndSet(); 如果cas失败,那么下面return ref.value返回的是什么?
来源:5-12 无锁境之给面试官讲讲无锁编程(Lock-Free Programming)(下)

莫失聪聪3779259
2021-08-10
在pop()方法的49行 head.compareAndSet(ref,next,stamp,stamp+1); 如果cas失败,那么下面return ref.value返回的是什么?是指失败之后的老的head节点?还是被其他线程cas更新后的新的head节点?
我认为是被其他线程更新后新的head节点,因为ref是head.getReference的引用变量,实际值是head.getReference,而我看源码内部是一个pair,被volitai修饰,所以head.getReference会读到主存中的最新head值,那么ref.value就是最新的head值。但是我不明白,return 最新主存中的head是对的吗?还是我理解错了。。求指教。(cas成功时我能理解,返回当前要删除的旧head,新的head 指向 旧head的next。)
写回答
1回答
-
LockFreeStack.java,可以看下源码,老师已经改了,只有CAS操作成功才能返回弹出的头节点,如果失败相当于要弹出的头节点已经不是头节点了,需要重新进循环
032021-08-24
相似问题