CAS 介绍
Compare and Swap,即比较再交换,其中有内存值V,旧值A,需要置换的值B,当V=A时,就可以把V值交换成B,如果不相等继续尝试。
举例描述
其实V就是当前内存里面的值,而旧值A就是在执行更新操作的时候在内存取出来的值,而只有在更新前取出来的值等于V值是才把B值置换过去,如果不相等就说明被别的线程给修改,那么就先取出当前的值作为A,继续进行比较置换。
比如要修改数据库里面存储某个用户的账户金额信息如:
id | amount | version |
---|---|---|
1 | 100 | 1 |
如果充值20,在修改时候先取出数据,这个时候amount=100 version=1,以版本号作为标准则A=1,V=1,B=2,进行修改的时候version=1即A=V,则可以进行修改amount=100+20,version=B=2,如果A!=V那么就继续重新获取version作为A重试。至于是否一直尝试,可以设置超时时间或者尝试次数,失败的后续用定时任务补偿。
网友评论