什么是死锁?死锁的四个必要条件?如何防止发生死锁?

一、什么是死锁?

         死锁是指两个或多个进程(线程)因为竞争资源而无法继续执行的状态。

二、死锁发生的四个必要条件?

  1. 互斥条件(Mutual Exclusion):至少有一个资源被标记为独占,即一次只能被一个进程(线程)使用。

  2. 请求与保持条件(Hold and Wait):进程(线程)已经持有了至少一个资源,并且在等待获取其他进程(线程)持有的资源。

  3. 不可剥夺条件(No Preemption):已经分配给进程(线程)的资源不能被强制性地剥夺,只能由进程(线程)自己释放。

  4. 循环等待条件(Circular Wait):存在一个进程(线程)的资源请求链,使得每个进程(线程)都在等待下一个进程(线程)所持有的资源。

三、如何防止死锁的发生?

  1. 破坏互斥条件:对于某些资源,可以允许多个进程(线程)同时访问,而不是独占资源。例如,使用读写锁代替互斥锁。

  2. 破坏请求与保持条件:在申请新资源之前,释放已经持有的资源。只有在获得所有需要的资源后,才重新申请资源。

  3. 破坏不可剥夺条件:允许操作系统强制性地剥夺某些进程(线程)所持有的资源,并将其分配给其他等待资源的进程(线程)。

  4. 破坏循环等待条件:对资源进行全局排序,并按照顺序申请资源,避免形成循环等待链。

  5. 使用死锁检测与恢复机制:通过周期性地检测系统中是否存在死锁,并采取相应的恢复措施,如终止某些进程(线程)或回滚操作。

【总结】 以上策略可以单独或结合使用,具体选择取决于系统的需求和特点。在设计和实现系统时,需要考虑并预防潜在的死锁问题,以确保系统的稳定性和可靠性。

猜你喜欢

转载自blog.csdn.net/chaojichunshen/article/details/132195398
今日推荐