死锁情况

来源:互联网 发布:ubuntu图形界面进不去 编辑:程序博客网 时间:2024/06/09 14:22

在多线程中,发生死锁的情况主要有一下几种:
1、系统资源不足
2、线程之间的执行顺序不合理
3、系统的资源分配不当
举个简单的例子,线程A拥有资源1的锁,在未释放资源1的锁的情况下,申请资源2 的锁;线程B拥有资源2的锁,在未释放锁的情况下申请资源1的锁,结果两者都没有呢释放自己资源的锁,都要申请对方资源的锁,在这种情况下,就会发生死锁,若没有外界条件的推动,程序很难进行下去。

产生死锁的条件:
1、互斥性:一个资源一次只能被一个线程占用;
2、请求与保持条件:一个线程因请求资源而阻塞时,对已获得的资源保持不放;
3、不剥夺条件:线程已获得的资源,在末使用完之前,不能强行剥夺;
4、循环等待条件:若干线程之间形成一种头尾相接的循环等待资源关系;
满足这四个条件会发生死锁,在具体的程序设计中,我们要合理的分配资源和线程的执行顺序,确保死锁不发生。

原创粉丝点击