死锁产生条件以及避免方式

死锁产生的四个条件:

  1. 资源互斥,同一时间内只有一个线程能访问这个共享资源
  2. 请求持有,此时一个线程已经持有了至少一个资源,并且又提出了新的资源请求,而新的资源已经被其他的请求占有,所以当前的线程已经被阻塞,并且阻塞以后不会释放当前已经持有的资源
  3. 不可剥夺条件,就是指线程获取到的资源在自己使用完成前,不会被其他线程抢占,只能自己使用完成后,由自己释放该资源
  4. 环路等待请求,指在发生死锁时,若干线程形成头尾相接的循环资源等待关系

解决方案:

  1. 互斥是没办法打破的,因为这就是我们使用锁的意义,就是为了互斥。
  2. 请求资源可以优化为一次请求所有的资源,避免互相等待。
  3. 打破不可剥夺条件,设置超时时间,已经持有资源的线程,如果长时间请求不到其他的资源,则释放当前持有的资源
  4. 环路加锁,注意加锁顺序,保证每个线程按照同样的顺序加锁
posted @ 2024-10-17 17:56  iiiiiiiivan  阅读(7)  评论(0编辑  收藏  举报