什麼是死鎖
指兩個或兩個以上的進程在執行過程中,由於競爭資源或者由於彼此通信而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。
死鎖原因
- 系統資源不足
- 資源分配不當
- 進程運行的順序不合適
死鎖的條件
操作系統上說,產生死鎖的條件有四個:
- 互斥條件:所謂互斥就是進程在某一時間內獨佔資源。
- 請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。
- 不剝奪條件:進程已獲得資源,在末使用完之前,不能強行剝奪。
- 循環等待條件:若干進程之間形成一種頭尾相接的循環等待資源關係。
舉個栗子
資源A和B分別都是獨佔資源。—-形成互斥條件
線程1在佔有資源A後,需要請求資源B來完成自己的任務。同時,線程2佔有資源B,需要請求資源A來完成自己任務。這個時候因爲線程1和線程2都不能滿足繼續運行的條件(線程1少資源B,線程2少資源A),從而進入阻塞狀態。同時彼此都擁有對方需要的資源,而不釋放。(請求與保持,不剝奪)又等待彼此的資源(循環等待)。於是就形成了死鎖。
現實出現的原因
出現死鎖時,有很大一部分由第三個原因造成的。