死锁是什么?在postgresql中是如何预防死锁的?

什么是死锁?

进程的加锁请求会被锁冲突阻塞,从而进入睡眠等待状态。
而如果出现了多个进程持有、且等待其他进程释放资源的恶性环,即形成死锁。
可以简单地将死锁理解为:存在资源争夺的恶性环
死锁
举个栗子:
假设有n个人,围着圆桌坐了一圈。每个人左手都拿着一个馒头,且都用右手去抢自己右手边人手里的馒头。结果谁都把馒头吃不到嘴里!抢馒头

postgre中的死锁预防

“持有者靠前”

当进程请求加锁时,如果失败,会进入等待队列。如果在队列中已经存在一些进程要求本进程中已经持有的锁,那么为了尽量避免死锁,可以简单地把本进程插入到它们的前面。
持有者靠前

“先到先处理”

当一个锁被释放时,将会试图唤醒等待队列中的进程。如果其中的某个进程的要求与排在它前面但由于某些原因不能被唤醒的进程冲突,这个进程将不被唤醒。这么做可以保证互相冲突的加锁请求按照到达的先后被处理。先到先处理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值