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

什么是死锁?

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

postgre中的死锁预防

“持有者靠前”

当进程请求加锁时,如果失败,会进入等待队列。如果在队列中已经存在一些进程要求本进程中已经持有的锁,那么为了尽量避免死锁,可以简单地把本进程插入到它们的前面。
死锁是什么?在postgresql中是如何预防死锁的?_第3张图片

“先到先处理”

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

你可能感兴趣的:(PostgreSQL)