2025/3/19

This commit is contained in:
2025-03-19 14:36:09 +08:00
commit abb37c49a7
18 changed files with 2005 additions and 0 deletions

16
技术/操作系统/OS.md Normal file
View File

@@ -0,0 +1,16 @@
## 死锁是什么?怎么产生的?
死锁只有**同时满足**以下四个条件才会发生:
- 互斥条件:互斥条件是指**多个线程不能同时使用同一个资源**。
- 持有并等待条件:持有并等待条件是指,当线程 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)