死锁

会产生死锁的必要条件

1.互斥使用,获取锁的过程是互斥的,一个线程拿了这把锁,另一个线程也想获取,就需要阻塞等待

2.不可抢占,前锁只有主动解锁,后锁才能获取到线程,不可抢行夺取

3.请求保持,线程在持有A的情况下,尝试获取锁B

4.循环等待 

 

死锁一般有3种情况

1.一个线程一把锁

  如果你设置的锁的不可重入的锁,且一个线程对这把锁加锁两次,就会出现死锁

 

2.两个线程两把锁

当我们有两个不同的线程,线程1拿到锁A,线程2拿到锁B,在让线程1去拿锁B,让线程2去拿锁A,这样就会出现死锁的情况,因为线程1或者是线程2的最外层的锁A/B都没有释放锁,都在处于阻塞状态

 

3.N个线程M把锁

相当于5个人同时去吃面而老板只给了5根筷子,如何让5个人都吃到面,就会制订规矩,因为线程是随机调度的,我们制定规矩让其中一个人先吃,这个人吃完后就退出让下一个人吃,以此类推

 

解决死锁的方法

根据代码破坏死锁形成的必要条件,

 

posted @ 2025-02-19 21:27  油头男孩  阅读(9)  评论(0)    收藏  举报