• 互斥条件:该资源任意一个时刻只由一个线程占用。
  • 请求与保持条件:一个线程因请求资源而阻塞时,对已获得的资源保持不放。
  • 不剥夺条件: 线程已获得的资源在未使用完之前不能被其他线程强行剥夺,只有自己使用完毕后才释放资源。
  • 循环等待条件: 若干线程之间形成一种头尾相接的循环等待资源关系。

怎么便于记忆?

1.资源互斥性(资源的属性,不会同时属于/分配给多个进程)->2.持有和等待(进程被分配(持有)资源后而且在等待(申请)其他资源)->3不可剥夺(对于已分配的资源,不可再强制收回来)->4.环形等待(进程之间资源等待形成相互依赖,互不礼让) 用再通俗的话,进一步解释这个逐渐升级的状况。1->2->3->4是资源分配逐渐条件递进、加强、升级的过程: 资源是互斥的每次属于一个进程(1.互斥); 资源分配了我占着而且我还要申请其他资源(2.持有和等待); 我占着的资源你没法拿,你占着的资源我没法拿(3.不可剥夺); 我申请的资源在你那,你申请的资源在我这(4.循环等待),最终形成了一个相互占有、相互等待的僵持局面~

如何预防死锁?

破坏死锁的产生的必要条件即可:

破坏请求与保持条件:一次性申请所有的资源。 破坏不剥夺条件:占用部分资源的线程进一步申请其他资源时,如果申请不到,可以主动释放它占有的资源。 破坏循环等待条件:靠按序申请资源来预防。按某一顺序申请资源,释放资源则反序释放。破坏循环等待条件.