# 死锁复习题

> 原文：<https://github.com/angrave/SystemProgramming/wiki/Deadlock-Review-Questions>

## 话题

Coffman 条件资源分配图用餐哲学家

*   DP 解决方案失败
*   活锁 DP 解决方案
*   工作 DP 解决方案：优势/缺点

## 问题

*   什么是科夫曼条件？
*   每个科夫曼条件意味着什么？ （例如，你能提供每个的定义）
*   给出一个真实的例子，依次打破每个 Coffman 条件。需要考虑的情况：画家，油漆，油漆刷等。您如何确保工作完成？
*   能够识别 Dining Philosophers 代码何时导致死锁（或不）。例如，如果您看到以下代码片段不满足 Coffman 条件？

```c
// Get both locks or none.
pthread_mutex_lock( a );
if( pthread_mutex_trylock( b ) ) { /*failed*/
   pthread_mutex_unlock( a );
   ...
}
```

*   如果一个线程调用

```c
  pthread_mutex_lock(m1) // success
  pthread_mutex_lock(m2) // blocks
```

和另一个线程调用

```c
  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

（画出资源图！）