死鎖通常是因為你使用了鎖。 在python里可以直接使用Queue,它自帶了鎖。你不需要自己設置一個鎖。
所以嚴格來說,在python中,不需要鎖。如果用到了鎖,特別是多線程處理。要采用隊列方式去解決,就沒有這個問題了。
如果一定要用鎖就存在死鎖的情形。比如一個鎖依賴另一個鎖,在某種情形下,兩者都打不開。特別是多線程的時候。
通常我們的辦法是,在線程里設置一個心跳變量。在主線程里檢查這個變量。如果一個線程長時間心跳停止 ,應該是死了。死鎖也包括在內(nèi)。
解:不會有發(fā)生死鎖的可能性。
在本題中,進程p1和p2都使用的資源集合是{a,b},由于進程p2在申請a之前已經(jīng)釋放了b,不存在占有b并且申請a的情況,所以進程p1和p2之間不滿足死鎖的四個必要條件,不會產(chǎn)生死鎖;
進程p1和p3都使用的資源集合是{e,f,g},進程p1和p3都是先申請資源e,這兩個進程同時申請資源,那么只能有一個進程先獲得e,另一個進程將因為得不到e而阻塞,獲得e的進程將進一步順利獲得資源f和g,從而運行結束,釋放資源e,f和g,喚醒另一個進程運行??梢?,進程p1和p3之間不會產(chǎn)生死鎖;
進程p2和p3都使用的資源集合是{c,d},由于進程p2在申請d之前已經(jīng)釋放了c,不存在占有c并且申請d的情況,所以進程p2和p3之間不滿足死鎖的四個必要條件,不會產(chǎn)生死鎖。
綜上所述,當P1、P2、P3并發(fā)執(zhí)行時,沒有發(fā)生死鎖的可能性。
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據(jù)《信息網(wǎng)絡傳播權保護條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權利,請在一個月內(nèi)通知我們,我們會及時刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學習鳥. 頁面生成時間:2.350秒