死鎖的必要條件
- 互斥條件:一個資源每次只能被一個進(jìn)程使用埋酬。
- 請求與保持條件:一個進(jìn)程因請求資源而阻塞時,對已獲得的資源保持不放。
- 不剝奪條件:進(jìn)程已獲得的資源习蓬,在末使用完之前鳍咱,不能強(qiáng)行剝奪降盹。
- 循環(huán)等待條件:若干進(jìn)程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系。
這四個條件是死鎖的必要條件谤辜,只要系統(tǒng)發(fā)生死鎖蓄坏,這些條件必然成立,而只要上述條件之
一不滿足丑念,就不會發(fā)生死鎖涡戳。
死鎖的簡單例子
A Thread:
{
Lock(Mutex_A);
Lock(Mutex_B);
}
B Thread:
{
Lock(Mutex_B);
Lock(Mutex_A);
}
由于兩次Lock之間并不是原子操作,故有幾率的當(dāng)A線程進(jìn)入Lock(Mutex_A)的時候B線程恰好進(jìn)入了Lock(Mutex_B)脯倚,這時候產(chǎn)生了循環(huán)等待渔彰,就進(jìn)入了死鎖。