rcore-os / rCore-Tutorial-Book-v3

A book about how to write OS kernels in Rust easily.

Home Page:https://rcore-os.github.io/rCore-Tutorial-Book-v3/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

rCore-Tutorial-Book-v3/chapter8/5concurrency-problem

utterances-bot opened this issue · comments

并发中的问题 - rCore-Tutorial-Book-v3 3.6.0-alpha.1 文档

https://rcore-os.cn/rCore-Tutorial-Book-v3/chapter8/5concurrency-problem.html

第二个线程thr2设置A的值为2

第二个线程thr2设置A的值为1

操作系统有切换回线程thr1继续执行

操作系统又切换回线程thr1继续执行

安全全状态

安全全状态

Finish[0..n-1]

Finish[0..=n-1]

指出了死锁产生的四个必要条件:

实际上这里应该是三个必要条件、一个充分条件,不宜混淆。

实际上这里应该是三个必要条件、一个充分条件,不宜混淆。

@chestNutLsj 从ostep上面的描述来看这四个都是必要条件?

实际上这里应该是三个必要条件、一个充分条件,不宜混淆。

@chestNutLsj 从ostep上面的描述来看这四个都是必要条件?

@wyfcyx 没有看过ostep,我根据的资料是精髓与设计原理。不过根据我的理解,互斥、占有并申请、不可抢占并不能直接导致死锁发生,但死锁一定会有这三个特征,所以是必要性;而循环等待链一旦成立,表明资源不足以供给进程的需要,因此一定会导致死锁发生,因而是充分性。

关于这个话题可以进一步查找资料和探讨。