2009年6月18日 星期四

Deadlock

今天去看了一下改好的嵌入式軟體的期末考卷。檢討一下,看看有哪些觀念還不太清楚的。其中有一題是問只用一個semaphore時,有沒有可能發生Deadlock的問題?此題的答案為有可能發生Deadlock,不過助教給的解釋是當call semaphore lock時,沒去unlock就會發生。在當時聽到時覺得不太滿意,不過其實Deadlock的條件已經想不太起來了,因此回去找一下Deaklock的定義,看看還有哪些情況會發生。

Deadlock發生的4個條件:
1. Mutual Exclusion: At least one resource must be held in a non-sharable way.
2. Hold and Wait: A process must be holding a resource and waiting for another.
3. No Preemption: Resource cannot be preempted.
4. Circular Wait: A waits for B, B waits for C, C waits for A.

看完以後,就想到要是自己去等自己的話,也會發生Deadlock,或者包在semaphore裡面的是一個無窮迴圈。也就是一進去就出不來的情況下,就會發生。因此一個semaphore的確會發生Deadlock的問題。

沒有留言:

張貼留言