【Mysql】什么是死锁?如何避免死锁

目录

  • 死锁
    • 1. 什么是死锁(争抢资源、互相等待)
    • 2. 死锁产生的四个必要条件
      • 1. 互斥
      • 2. 不可抢占
      • 3. 请求和保持
      • 4. 循环等待
    • 3. 如何避免死锁

死锁

1. 什么是死锁(争抢资源、互相等待)

多线程因为争抢资源而出现的互相等待的状态

2. 死锁产生的四个必要条件

1. 互斥

当资源被一个线程使用(占有)时,别的线程不能使用(如:张三拿到了苹果,李四就不能拿苹果了)

2. 不可抢占

资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放(如:李四不能从张三手里抢苹果,只能等张三主动放弃苹果)

3. 请求和保持

当资源请求者在请求其他的资源的同时保持对原有资源的占有(如:张三拿到了苹果,他还可以去那香蕉,并不冲突)

4. 循环等待

存在一个等待队列(如张三等李四的香蕉,李四在等张三的苹果,僵住了)

3. 如何避免死锁

打破上诉四个必要条件其中一个(除了互斥),就可以有效避免死锁

  1. 破坏“请求和保持”条件:所有的进程在开始运行之前,必须一次性的申请其在整个运行过程各种所需要的全部资源

  2. 破坏“不可抢占”条件:当一个已经持有了资源的进程在提出新的资源请求没有得到满足时,它必须释放已经保持的所有资源,待以后需要使用的时候再重新申请

  3. 破坏“循环等待”条件:可以通过定义资源类型的线性顺序来预防,可以将每个资源编号,当一个进程占有编号为i 的资源时,那么它下一次申请资源只能申请编号大于i 的资源。

你可能感兴趣的:(数据库,算法,链表,mysql)