1,死锁的两种情况
1,同一线程重复申请同一把锁,在第二次申请时,必须要将第一次申请的锁释放掉,
但是要释放第一次申请的锁,就必须要将第二次申请的锁释放,这样就死循环了。
2,进程1申请了锁1,进程2申请了锁2,然后进程1右申请了锁2,进程2又申请了锁1,
这样当进程1申请锁2时,必须要将锁2释放,释放锁2又必须要锁1,释放锁1又必须释放锁2,
这样就死循环了。
2,产生死锁的原因
1,进程间推进的顺序不当:也就是说,申请和释放锁的顺序不对。
3,产生死锁的必要条件
1,互斥条件(其他线程必须等)
一个资源只能被一个线程占用,其他资源申请就必须要等待,直到当前线程释放。
2,请求和保持条件
一个线程拥有一个资源,然后去获取另一个新资源,当这个新的资源也被其他线程占用的时候,
当前进程就在挂起等待,但会保持不放自己的资源。
3,不可抢占资源
线程已获得的资源在没有释放前不能被占用,只能自己使用完后释放。
4,循环等待条件
线程组{p1,p2,p3,p4......pn}, p1等待p2占有的资源,p2等待p3占有的资源,,,,,pn等待p1占有的资源。
即每一个线性都想申请前一个线程占有的资源,形成一个环形等待队列。
4,如何避免死锁
1,打破死锁的必要条件(互斥条件不可打破);