如何避免死锁:
1.预防死锁–针对死锁的必要条件进行预防
破坏占有且等待条件,一次性申请进程所需要的所有资源。改进:允许进程只获得运行初期的资源,在运行过程中逐步释放使用完毕的资源,申请需要的资源。
破坏不可抢占条件:当一个进程申请需要的资源没有被满足时,释放掉所占有的所有资源。
破坏循环等待条件:给每个资源编号,当一个进程占有某个资源时,只能申请比这个编号大的资源
2.避免死锁–在分配资源之前判断是否会出现死锁
若一个进程的请求会导致死锁,则不启动。
若一个进程的增加资源会导致死锁,则不启动。
实现:银行家算法
需要记录可利用的资源向量,每个进程最大需求资源,已分配的资源,仍需要的资源。
当一个进程申请资源时,假设从可利用资源中分配给它申请的资源,看剩余的资源是否能满足某个进程执行完毕,若不能,则是不安全的,拒绝分配,若能,则假设可执行完毕的进程所占用的资源返还到可利用资源中,将其标记为可完成进程,继续判断其它进程,资源分配顺序则为安全序列。