原文:https://github.com/angrave/SystemProgramming/wiki/Deadlock-Review-Questions
Coffman 条件资源分配图用餐哲学家
- DP 解决方案失败
- 活锁 DP 解决方案
- 工作 DP 解决方案:优势/缺点
- 什么是科夫曼条件?
- 每个科夫曼条件意味着什么? (例如,你能提供每个的定义)
- 给出一个真实的例子,依次打破每个 Coffman 条件。需要考虑的情况:画家,油漆,油漆刷等。您如何确保工作完成?
- 能够识别 Dining Philosophers 代码何时导致死锁(或不)。例如,如果您看到以下代码片段不满足 Coffman 条件?
// Get both locks or none.
pthread_mutex_lock( a );
if( pthread_mutex_trylock( b ) ) { /*failed*/
pthread_mutex_unlock( a );
...
}
- 如果一个线程调用
pthread_mutex_lock(m1) // success
pthread_mutex_lock(m2) // blocks
和另一个线程调用
pthread_mutex_lock(m2) // success
pthread_mutex_lock(m1) // blocks
会发生什么?为什么?如果第三个线程调用pthread_mutex_lock(m1)
会发生什么?
- 有多少进程被阻止?像往常一样,假设一个进程能够获得下面列出的所有资源,就能够完成。
- P1 获得 R1
- P2 获得 R2
- P1 收购 R3
- P2 等待 R3
- P3 收购 R5
- P1 等待 R4
- P3 等待 R1
- P4 等待 R5
- P5 等待 R1
(画出资源图!)