2025-03-19 14:36:09 +08:00

16 lines
1.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 死锁是什么?怎么产生的?
死锁只有**同时满足**以下四个条件才会发生:
- 互斥条件:互斥条件是指**多个线程不能同时使用同一个资源**。
- 持有并等待条件:持有并等待条件是指,当线程 A 已经持有了资源 1又想申请资源 2而资源 2 已经被线程 C 持有了,所以线程 A 就会处于等待状态,但是**线程 A 在等待资源 2 的同时并不会释放自己已经持有的资源 1**。
- 不可剥夺条件:不可剥夺条件是指,当线程已经持有了资源 **在自己使用完之前不能被其他线程获取**,线程 B 如果也想使用此资源,则只能在线程 A 使用完并释放后才能获取。
- 环路等待条件:环路等待条件指的是,在死锁发生的时候,**两个线程获取资源的顺序构成了环形链**。
## 如何避免死锁?
避免死锁问题就只需要破环其中一个条件就可以,最常见的并且可行的就是**使用资源有序分配法,来破环环路等待条件**。
那什么是资源有序分配法呢?线程 A 和 线程 B 获取资源的顺序要一样,当线程 A 是先尝试获取资源 A然后尝试获取资源 B 的时候,线程 B 同样也是先尝试获取资源 A然后尝试获取资源 B。也就是说线程 A 和 线程 B 总是以相同的顺序申请自己想要的资源。
![](https://cdn.xiaolincoding.com//picgo/1725352197122-95890bb1-f60e-4f85-883d-20a0ae6ce2ea.webp)