产生原因
- -互斥(资源独占):一个资源每次只能被一个进程使用;
- 请求与保持(部分分配,占有申请):一个进程在申请新的资源的同时保持对原有资源的占有(只有这样才是动态申请,动态分配);
- 不可剥夺(不可强占):资源申请者不能强行地从资源占有者手中夺取资源,资源只能由占有者自愿释放;
- 循环等待:若干进程之间形成一种头尾相连的循环等待资源关。
预防死锁
预防死锁的方法是通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或者几个,以避免发生死锁。 由于互斥条件是非共享设备所必须的,不仅不能改变,还应该加以保证,因此,主要是破坏产生死锁的后三个条件。
- 破坏请求与保持条件:对一个进程在请求资源时,它不能持有不可剥夺资源。
- 破坏不可剥夺条件:对一个已经保持了某些不可剥夺资源的进程,提出新的资源请求而不能得到满足时,它必须释放已经保持的所有资源,待以后需要时再重新申请。
- 破坏循环等待条件:对系统所有资源类型进行线性排列,并赋予不同序号。规定每个进程必须按序号递增的顺序请求资源。
解决办法
- 一次封锁法:每个进程(事务)将所有要使用的数据全部加锁,否则,就不能继续执行;
- 顺序封锁法:预先对数据对象规定一个封锁顺序,所有进程(事务)都按这个顺序加锁;
- 银行家算法:保证进程处于安全进程序列。