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