作業系統›Ch5 Deadlock(死結)第 3 題/共 11 題
3. Deadlock、Multithreading
#OS-05-003易DeadlockMultithreading
請寫一段multithread虛擬碼程式,說明什麼是deadlock。
參考答案與解析
Lock lockA, lockB;
void thread_A() {
lock(lockA);
lock(lockB); // 若lockB已被thread_B持有,thread_A會在此永久等待
// critical section
unlock(lockB);
unlock(lockA);
}
void thread_B() {
lock(lockB);
lock(lockA); // 若lockA已被thread_A持有,thread_B會在此永久等待
// critical section
unlock(lockA);
unlock(lockB);
}
deadlock範例:假設thread_A先成功取得lockA,幾乎同時thread_B先成功取得lockB。接下來thread_A嘗試取得lockB(被thread_B持有中,需等待),同時thread_B嘗試取得lockA(被thread_A持有中,需等待)。兩個thread互相等待對方持有、且不會釋放的鎖,形成循環等待(circular wait),沒有任何一方能繼續執行,這就是deadlock。根本原因是兩個thread取得鎖的『順序』相反(lockA/lockB vs. lockB/lockA),若統一鎖的取得順序即可避免。
📄 台大112
▤完整推導請見《WH 資工筆記 · 作業系統》Ch5 Deadlock(死結)