线程死锁怎么产生的以及如何避免

死锁产生的四个必要条件:

  • 互斥:一个资源每次只能被一个进程使用(资源独立)
  • 请求与保持:一个进程因请求资源而阻塞时,对已获得的资源保持不放(不释放锁)
  • 不剥夺:进程已获得的资源,在未使用之前,不能强行剥夺(抢夺资源)
  • 循环等待:若干进程之间形成一种头尾相接的循环等待的资源关闭(死循环)

避免死锁的方法:

  • 第一个条件 "互斥" 是不能破坏的,因为加锁就是为了保证互斥
  • 一次性申请所有的资源,破坏 "占有且等待" 条件
  • 占有部分资源的线程进一步申请其他资源时,如果申请不到,主动释放它占有的资源,破坏 "不可抢占" 条件
  • 按序申请资源,破坏 "循环等待" 条件
posted @ 2021-09-23 18:35  joshua317  阅读(84)  评论(0编辑  收藏  举报