wx.peng 2023-12-22 11:43 采纳率: 100%
浏览 1
已结题

ConcurrentLinkedQueue size为什么不使用一个原子变量

为何在 ConcurrentLinkedQueue 中需要遍历链表来获取 size而不使用一个原子变量呢?

我看到书里是这么写的:这是因为使用原子变量保存队列元素个数需要保证入队、出队操作和原子变量操作是原子性操作,而 ConcurrentLinkedQueue 使用的是 CAS 无锁算法所以无法做到这样。

但是我个人的理解是:CAS不是能保证一个变量的原子性嘛?
求各位技术大咖指点一下

  • 写回答

1条回答 默认 最新

  • wx.peng 2023-12-22 11:46
    关注

    哦,我好像知道了。

    简单的举一个例子,因为是没有加锁,正常的逻辑应该是要先加到队列,然后加对count 进行原子 + 1,这是两个步骤
    如果我在统计count的时候,刚好有一个线程已经把元素加到队列中,但是还没有对count进行原子操作,这个时候count的数量就会有问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月30日
  • 已采纳回答 12月22日
  • 创建了问题 12月22日

悬赏问题

  • ¥15 求推荐发表需要付费的深度学习遥感场景分类SCI期刊
  • ¥15 无法在java控制台录入文字
  • ¥15 flutter网页应用用python的http服务器访问速度慢
  • ¥15 VESTA绘图原子颜色显示异常
  • ¥15 天翼云搭建多ip l2tp
  • ¥15 python实现CAD识图
  • ¥15 如何实现在renpy中创建并应用不同大小尺寸对话框?
  • ¥15 table表格有一列是固定列 滑动到最下面时 固定的那一列有几行没显示出来
  • ¥20 单细胞数据注释时报错
  • ¥15 vscode编译ros找不到头文件,cmake.list文件出问题,如何解决?(语言-c++|操作系统-linux)