Java-CAS(Compare And Swap)
程序员文章站
2022-03-08 20:12:15
...
1.并发编程中有两种派别,一种是乐观派,一种是悲观派。
即加锁是悲观派,不加锁而使用CAS是乐观派。
2.CAS核心算法:
执行函数:CAS(V,E,N)
V:表示要更新的值。
E:表示预期值。(Expect)
N:表示新值。(New)
3.多线程同时使用CAS操作一个值,只有一个会胜出,其余都失败。
免疫死锁。
4.CPU对CAS支持:
1.多线程如果在更新V这个操作中间有其他线程更新V值怎么办?
2.CAS是系统原语,原语用来完成某个功能,并且其执行过程是连续的,不可被中断。
3.所以CAS是一条CPU的原子指令。不会造成数据不一致。
5.CAS的ABA问题:
1.即线程在拿到V值后,判断V==E?前,其他两条线程已经修改了两次或以上次数,
将V值改回了原来的值,这样第一条线程判断会通过,但不知道已经改了两次。
2.虽然可能没问题,但还是要防止。
3.方法:使用AtomicStampedReference类(会记下修改时间的时间戳,一起去对比)
每次更新V值时,也会更新时间戳。
上一篇: Mave入门教程 项目管理
下一篇: python(day17)二分查找
推荐阅读
-
如何创建Linux的swap交换分区文件的方法步骤
-
solarisx86安装ORACLE11.2.0.3软件时因SWAP不足报错:INFO:ld:fatal:mmapanonfailed
-
Mac beyond compare 合文件 权限不足
-
安装Oracle 11g报swap大小不够,aio-max-nr参数不符等问题解决办法
-
String.Compare(String, String, StringComparison)方法
-
linux系统添加swap虚拟内存与删除配置
-
清除swap里的文件的方法
-
Linux学习笔记(十四)磁盘管理(二):格式化、挂载以及Swap分区
-
linux清理swap和buffer/cache的方法
-
Centos7中添加、删除Swap交换分区的方法