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