



下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第python多線程死鎖現象及解決方法目錄本節重點一死鎖現象二遞歸鎖
本節重點
了解死鎖現象與解決方法
本節時長需控制在15分鐘內
一死鎖現象
所謂死鎖:是指兩個或兩個以上的進程或線程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。
此時稱系統處于死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱為死鎖進程,如下就是死鎖
fromthreadingimportThread,Lock
importtime
mutexA=Lock()
mutexB=Lock()
classMyThread(Thread):
defrun(self):
self.func1()
self.func2()
deffunc1(self):
mutexA.acquire()
print('\033[41m%s拿到A鎖\033[0m'%)
mutexB.acquire()
print('\033[42m%s拿到B鎖\033[0m'%)
mutexB.release()
mutexA.release()
deffunc2(self):
mutexB.acquire()
print('\033[43m%s拿到B鎖\033[0m'%)
time.sleep(2)
mutexA.acquire()
print('\033[44m%s拿到A鎖\033[0m'%)
mutexA.release()
mutexB.release()
if__name__=='__main__':
foriinrange(10):
t=MyThread()
t.start()
執行效果
Thread-1拿到A鎖
Thread-1拿到B鎖
Thread-1拿到B鎖
Thread-2拿到A鎖#出現死鎖,整個程序阻塞住
二遞歸鎖
解決方法,遞歸鎖,在Python中為了支持在同一線程中多次請求同一資源,python提供了可重入鎖RLock。
這個RLock內部維護著一個Lock和一個counter變量,counter記錄了acquire的次數,從而使得資源可以被多次require。直到一個線程所有的acquire都被release,其他的線程才能獲得資源。
上面的例子如果使用RLock代替Lock,則不會發生死鎖,二者的區別是:遞歸鎖可以連續acquire多次,而互斥鎖只能acquire一次
fromthreadingimportThread,RLock
importtime
mutexA=mutexB=RLock()#一個線程拿到鎖,counter加1,該線程內又碰到加鎖的情況,則counter繼續加1,這期間所有其他線程都只能等待,等待該線程釋放所有鎖,即counter遞減到0為止
classMyThread(Thread):
defrun(self):
self.func1()
self.func2()
deffunc1(self):
mutexA.acquire()
print('\033[41m%s拿到A鎖\033[0m'%)
mutexB.acquire()
print('\033[42m%s拿到B鎖\033[0m'%)
mutexB.release()
mutexA.release()
deffunc2(self):
mutexB.acquire()
print('\033[43m%s拿到B鎖\033[0m'%)
time.sleep(2)
mutexA.acquire()
print('\033[44m%s拿到A鎖\033[0m'%)
mutexA.release()
mutexB.release()
if__name__=='__main__':
foriinrange(10):
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國防銹干燥劑市場分析及競爭策略研究報告
- 2025至2030年中國鋼結構支架市場分析及競爭策略研究報告
- 2025至2030年中國超級純合成發動機油市場分析及競爭策略研究報告
- 2025至2030年中國自動感應干手器市場分析及競爭策略研究報告
- 2025至2030年中國紫菜米餅市場分析及競爭策略研究報告
- 2025至2030年中國監控卡多媒體疊加系統市場分析及競爭策略研究報告
- 2025至2030年中國玻璃塞夾具市場分析及競爭策略研究報告
- 2025至2030年中國液壓下錨機市場分析及競爭策略研究報告
- 2025至2030年中國氮氣發生器市場分析及競爭策略研究報告
- 2025至2030年中國扣鎖型快速接頭市場分析及競爭策略研究報告
- 部編版小學語文四年級上冊第三單元整體設計交流課件
- 年產30萬噸水泥粉磨站建設工程可行性研究報告
- 邊際貢獻分析
- 2017人教版一年級語文下冊識字表
- 《高度參與的課堂 提高學生專注力的沉浸式教學》讀書筆記思維導圖PPT模板下載
- GB/T 28046.1-2011道路車輛電氣及電子設備的環境條件和試驗第1部分:一般規定
- 外科病應急預案嵌頓疝病人應急預案
- 孤獨癥康復教育人員上崗培訓練習題庫及答案
- 機械設備投入計劃及保證措施
- 東南大學附屬中大醫院ECMO操作記錄單
- 每月防火檢查及記錄表(每月一次)
評論
0/150
提交評論