什么是死锁

什么是死锁

我将从3个方面回答这个问题:1、死锁的定义。2、形成死锁的条件。3、如何解决死锁问题

1、死锁的定义

  一组互相竞争资源的线程,因互相等待,再无外力的作用下,形成的“永久”阻塞的现象

2、形成死锁的条件

  互斥:一个资源同时只允许一个线程占用

  非剥夺:所竞争的资源,在当前线程只有的情况下,不可被其他线程强行剥夺

  请求和保持条件:当前线程已经获得了资源x,又去请求资源y,又不释放资源x

  循环等待:线程t1等待线程t2占用的资源,线程t2等待线程t1占用的资源

3、如何解决死锁问题

  形成死锁需要上面的4个条件同时满足,我们只需要破坏其中一个条件即可。互斥是无法被破坏的,因为锁本身就是通过互斥来解决线程安全问题的,因此从如下3个点进行死锁的处理

    非剥夺:一次性申请线程所需要的所有资源 

    请求和保持条件:当前线程已经获得了资源x,又去请求资源y。如果申请不到y资源就先释放资源x

    循环等待:按照顺序申请资源,将资源排序顺序进行申请

posted @ 2022-04-17 11:33  编程小白1024  阅读(167)  评论(0编辑  收藏  举报