乐观锁 ---

扣库存
高并发 因为原子性 超卖
select sockt_num where good_id = 1 先查询库存数量
if sockt_num > 2 {
    
    
	update stock_num = stock_num - 2 where good_id = 1
}

悲观锁 性能下降
1 加锁 互斥,排它  先加锁,只有加锁成功的线程 ,才能执行,后面的线程排队
select sockt_num where good_id = 1 先查询库存数量


释放锁

乐观锁

T1 select stock_num ,version where good_id = 1
stock_num:10 ,version:0
if sockt_num > 2 {
    
    
	update stock_num = stock_num - 2 ,version = version + 1
	where good_id = 1 and version = version
}
T1 开始执行更新,发现version变成了1
更新失败,重新再查下

T2 select stock_num,version where good_id = 1
stock_num:10,version: 0
if(sock_num > 2){
    
    
	update stock_num = stock_num - 2,version = version + 1;
	where good_id = 1 and version = version //判断别的线程有没有改过banbenhao

T2 执行完,version变成了1

通过版本号,来区分,数据是否被修改过,如果没有修改过,直接更新,修改过,重新执行

猜你喜欢

转载自blog.csdn.net/m0_68935893/article/details/143389288