CAS会产生哪些问题呢?

乔欣 Java面经 发布时间:2022-11-12 22:40:21 阅读数:7519 1 并发编程面试题(2023最新版)
下文笔者讲述CAS可能会引发问题的简介说明,如下所示
CAS可能引发的问题:
    ABA问题、循环时间长开销大问题、循环变量只能保证一个共享变量的原子操作

ABA问题

 如:
  线程1从内存位置 V 中取出 A
  此时另一个线程 2 也从内存中取出 A,且线程 2 进行了一些操作变成了 B,然后线程 2 又将 V 位置的数据变成 A
  这时候线程 1 进行 CAS 操作发现内存中仍然是 A,然后线程 1 操作成功
  此时虽然“线程1”CAS 操作成功
    但可能存在潜藏问题
 
注意事项:  
  从Java1.5开始JDK的atomic包里提供了一个类 AtomicStampedReference来解决ABA问题

循环时间长开销大

对于资源竞争严重(线程冲突严重)情况
 CAS自旋的概率会比较大
 从而浪费更多CPU资源,效率低于synchronized

CAS只能保证一个共享变量原子操作

对一个共享变量执行操作时
 我们可以使用循环CAS方式来保证原子操作
  但是对多个共享变量操作时
  循环CAS无法保证操作的原子性

此时我们只能采用加锁的方式处理CAS产生的问题 
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaMianJing/202211/16682640764885.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者