什么是死锁?如何避免死锁

1、什么是死锁
多个进程或线程互相等待对方的资源,在得到新的资源之前不会释放自己的资源,这样就形成了循环等待,这种现象被称为死锁。
2、产生死锁的四大必要条件
资源互斥:资源只有两种状态,只有可用和不可用两状态,不能同时使用,同一时刻只能被一个进程或线程使用。

占有且请求:已经得到资源的进程或线程,继续请求新的资源,并持续占有旧的资源。

资源不可剥夺:资源已经分配进程或线程后,不能被其它进程或线程强制性获取,除非资源的占有者主动释放。

环路等待:死锁发生时,系统中必定有两个或两个以上的进程或线程组成一条等待环路。

注意:死锁一旦产生基本无解,现在的操作系统无法解决死锁,因此只能防止死锁产生。

3、防止死锁产生的方法

破坏占用且请求条件:采用预先静态分配的方法,进程或线程在运行前一次申请所有资源,在资源没有满足前不投入运行。
缺点:系统资源会被严重浪费,因为有些资源可能开始时使用,而有些资源结束时才使用。

破坏不可剥夺条件:当一个进程或线程已经占有一个不可剥夺的资源时,请求新资源时无法满足,则释放已经占有的资源,一段时间后再重新申请。
缺点:该策略实现起来比较复杂,释放已经获取资源可能会导致前一阶段的工作失效,反复的申请释放资源会增加系统开销,占用CPU和寄存器、内存等资源。

破坏循环等待条件:给每个资源进行编号,进程或线程按照顺序请求资源,只有拿到前一外资源,才能继续请求下一个资源。
缺点:资源的编号必须相对稳定,资源添加或销毁时会受到影响。

算法:银行家算法

4、如何判断死锁
1、画出资源分配图
2、简化资源分配图
3、使用死锁定理判断:如果没有环路肯定不会出现死锁。

你可能感兴趣的:(Linux环境编程,多线程)