多線程産生死鎖的4個必要條件?
答:
- 互斥條件:一個資源每次隻能被一個線程使用
- 請求與保持條件:一個線程因請求資源而阻塞時,對已獲得的資源保持不放
- 不剝奪條件:程序已經獲得的資源,在未使用完之前,不能強行剝奪
- 循環等待條件:若幹線程之間形成一種頭尾相接的循環等待資源關系
如何避免死鎖?
答:
指定擷取鎖的順序,舉例:
- 比如某個線程隻有獲得 A 鎖和 B 鎖才能對某資源進行操作,在多線程條件下,如何避免死鎖?
- 獲得鎖的順序是一定的,比如規定隻有獲得 A 鎖的線程才有資格擷取 B 鎖,按順序擷取鎖就可以避免死鎖。