悲观锁
我悲观地认为,我只能通过加锁来解决高并发带来的数据错误问题。
思想:
为查询到的数据进行加锁,当A读这个数据的时候,B就无法读取数据,这解决了问题,但是要知道,加锁的时候消耗很多资源。
乐观锁
我乐观地认为,我可以不通过加锁的方式,就可以解决高并发带来的数据错误问题。
乐观锁的思想主要就是CAS,即Compare And Swap。
当要对查询到的数据进行操作之前,保存一份旧值,当需要修改数据的时候,进行比对,如果说跟原来一样,那就说明没人动过这份数据,可以继续进行,否则的话,说明数据有可能出现并发修改的数据错误,那就不再进行数据修改的操作。
以此来保证数据的正确性。
乐观锁的弊端即解决方案
CAS思想会引发ABA问题,即数据A经过修改变成了B,后面又变回了A,这对乐观锁处理并发问题是致命的,因为假如出现了ABA问题,CAS就会发现旧值和当前值相同,即会进行数据的修改,殊不知,数据已然被修改过。
一种比较典型的解决方案就是增加版本号字段,每次进行修改数据后,都让版本号+1,即使出现了ABA问题,版本号依旧是变的,从而能避免错误。
来源:CSDN
作者:阳光大男孩!!!
链接:https://blog.csdn.net/weixin_43889841/article/details/104397333