前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CAS 和 ABA 问题浅析

CAS 和 ABA 问题浅析

作者头像
许杨淼淼
发布2019-12-29 20:03:54
4830
发布2019-12-29 20:03:54
举报
文章被收录于专栏:醉程序

在讨论数据库事务处理问题中,离不开 CASABA 的问题。

CAS

Compare And Swap, 先对比再替换

事实上,乐观锁用到的就是 CAS。

CAS, 现在有内存值V, 更改操作发生前的预期值A,要更改后的值B。当且仅当V==A时才进行更改操作。 原理很简单,这样真的是安全的么?

ABA

CAS 会导致 ABA的问题发生。我们先来看下什么是 ABA 问题。

线程one和线程two都要更新同一个数据V。此时one查V发现等于A,然后two也查V也看到是等于A,然后two开始更新V为B,更新时进行了对比发现更新时刻V确实等于A,此时two成功的进行了更改。然后two又把V(此时等于B)更新为了A。然后one开始操作更新,对比发现此时V确实等于A,就进行了更新为B的操作。

可以发现,尽管one的CAS操作是成功的,但不表示是没有问题的。因为one是期望在查询到更改之间 V是没有被更改过的,事实上是有可能被更改的。

参考

  1. Java CAS 和ABA问题
  2. Java并发:CAS、ABA问题、ABA问题解决方案
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年3月8日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CAS
  • ABA
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档