postgreaql源码中的锁机制

Spinlocks(自旋锁):

短期锁,一般不直接用。如果硬件中有TAS(test and set)指令集,则用硬件实现,否则用信号量实现。

__asm__ __volatile__(汇编语句模板: 输出部分: 输入部分: 破坏描述部分)
Lightweight locks (轻量级锁,LWLocks):

中期,用于锁 struct 结构体,无死锁检测,能自动释放。获取锁时用mutex来锁定锁队列,不成功则入等待队列。在事务出错恢复时会自动释放。

Regular locks (重量级锁):

有default 与 user 两种模式,user模式适用于长事务,没有等待队列。

row 行级别。access 表级别。

select for update/share 时会锁定行(共享锁)(悲观锁),提交事务后才被释放。

create index 时用共享锁加锁

vacuum 时会加共享更新排他锁

加锁与解锁过程:

在这里插入图片描述

死锁分两种:
  • hard:要请求的锁与其它进程已有锁冲突

  • soft:自己申请的锁和其它进程申请的锁冲突,但自己在它后面

soft 可利用拓扑排序清除,原理见 https://www.cnblogs.com/bigsai/p/11489260.html
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值