简论数据库乐观悲观锁与并发编程中的CAS

为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处。LaplaceDemon/ShiJiaqi。

http://www.cnblogs.com/shijiaqi1066/p/5783205.html 

1. 数据库悲观锁

加锁;

    操作(增删改查);

解锁;

2. 数据库乐观锁

updateset 列 = newValue where [条件] and 列 = 旧值;

注意:set 与 where 是合并在一起的,即原子执行的

解决ABA问题

对每张表引入版本号version

改进:

 updateset 列 = newValue , version = oldVersion+1  where [条件] and version = oldVersion; 

update失败怎么办?读取当前值,再次update,直到指定次数,或永远。

3. CAS

compare and swap,swap的意思虽然为“交换”,但实际编程中swap其实可以理解为set。

相当于数据库乐观锁中使用的update语句。比较与交换是一个连在一起的操作,即比较交换是一个原子操作。

比较失败怎么办?不交换,自旋

为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处。LaplaceDemon/ShiJiaqi。

http://www.cnblogs.com/shijiaqi1066/p/5783205.html 

原文地址:https://www.cnblogs.com/shijiaqi1066/p/5783205.html