1.什么是CAS

所谓CAS,check and set,在写操作时,先检查是否被别的线程修改过。
基本原理非常简单,一言以蔽之,就是“版本号”。每个存储的数据对象,多有一个版本号。我们可以从下面的例子来理解:
如果不采用CAS,则有如下的情景:
第一步,A取出数据对象X;
第二步,B取出数据对象X;
第三步,B修改数据对象X,并将其放入缓存;
第四步,A修改数据对象X,并将其放入缓存。
我们可以发现,第四步中会产生数据写入冲突。
如果采用CAS协议,则是如下的情景。
第一步,A取出数据对象X,并获取到CAS-ID1;
第二步,B取出数据对象X,并获取到CAS-ID2;
第三步,B修改数据对象X,在写入缓存前,检查CAS-ID与缓存空间中该数据的CAS-ID是否一致。结果是“一致”,就将修改后的带有CAS-ID2的X写入到缓存。
第四步,A修改数据对象Y,在写入缓存前,检查CAS-ID与缓存空间中该数据的CAS-ID是否一致。结果是“不一致”,则拒绝写入,返回存储失败。
这样CAS协议就用了“版本号”的思想,解决了冲突问题。

















最新文章

  1. 从零开始学 Java - CentOS 下安装 Nginx
  2. Python验证码6位自动生成器
  3. python 模块库
  4. C# PInvoke(DllImport使用) 进阶教程(一)转
  5. 【OOAD】OOAD概述
  6. 使用apache和htaccess对目录访问设置密码保护配置教程
  7. SQL Server数据库(SQL Sever语言 存储过程及触发器)
  8. eclipse项目持续报红解决
  9. Android2.2 API中文文档——View
  10. IOS 7 Study - UIActivityViewController(Presenting Sharing Options)
  11. 初试zabbix
  12. php 微信3 自定义菜单
  13. cocos2dx-lua绑定自定义c++类(二)
  14. MassMutual Interview Questions
  15. C# 枚举的使用
  16. C指针 指针和数组 二维数组的指针 指针应用
  17. Apache Spark技术实战之6 --Standalone部署模式下的临时文件清理
  18. c# 读取excels
  19. linux学习笔记 yum 在线管理软件包
  20. 一套oracle的练习题

热门文章

  1. tabindex 属性
  2. Effective C++(Third Edition) Item29 为“异常安全”而努力是值得的
  3. TCP/IP理解
  4. Datawhale MySQL 训练营 Task5
  5. jquery 3.0 新版本
  6. git查看添加删除远程仓库
  7. 07-matplotlib-箱线图
  8. 笨办法学Python - 习题8-10: Printing & Printing, Printing
  9. Linux下端口映射工具rinetd
  10. Vue 列表渲染及条件渲染实战