Skip to content

Instantly share code, notes, and snippets.

@ideawu
Last active December 2, 2020 04:44
Show Gist options
  • Save ideawu/b83dcdc96afce0a6ac57139025df42f1 to your computer and use it in GitHub Desktop.
Save ideawu/b83dcdc96afce0a6ac57139025df42f1 to your computer and use it in GitHub Desktop.
计算机入门: CAS

CAS(Compare And Set) 是一种避免错误地修改数据的手段. 举一个可以使用 CAS 的场景:

某工厂老板通过邮件告诉公司出纳, 要给某供应商打款. 因为工作流程失误, 有两个出纳都进行了打款. 款项被错误地打了两次. 如果工作流程没有问题, 或者公司的出纳只有一位, 依然可能出现打款两次的错误.

要解决这个问题, 可能你已经想到解决方案了: 给这次任务分配一次性的密钥, 拥有密钥的人才能打款, 密钥用完就失效.

CAS 的思路类似. 我们给数据加一把锁, 锁有密码, 只有拥有密码的人才能修改. 特别的, 密码是一次性的, 用过一次就会失效. CAS 一般用整数版本号来表示锁, 修改后, 版本号加1, 原来的锁自然就失效了.

任何一个系统, 如果实现了一次性写锁(密钥), 则这个系统拥有了 CAS 能力.

在数据库领域, CAS 属于乐观锁的一种实现.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment