



下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第python多線程死鎖現(xiàn)象及解決方法目錄本節(jié)重點(diǎn)一死鎖現(xiàn)象二遞歸鎖
本節(jié)重點(diǎn)
了解死鎖現(xiàn)象與解決方法
本節(jié)時(shí)長(zhǎng)需控制在15分鐘內(nèi)
一死鎖現(xiàn)象
所謂死鎖:是指兩個(gè)或兩個(gè)以上的進(jìn)程或線程在執(zhí)行過(guò)程中,因爭(zhēng)奪資源而造成的一種互相等待的現(xiàn)象,若無(wú)外力作用,它們都將無(wú)法推進(jìn)下去。
此時(shí)稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖,這些永遠(yuǎn)在互相等待的進(jìn)程稱為死鎖進(jìn)程,如下就是死鎖
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()
執(zhí)行效果
Thread-1拿到A鎖
Thread-1拿到B鎖
Thread-1拿到B鎖
Thread-2拿到A鎖#出現(xiàn)死鎖,整個(gè)程序阻塞住
二遞歸鎖
解決方法,遞歸鎖,在Python中為了支持在同一線程中多次請(qǐng)求同一資源,python提供了可重入鎖RLock。
這個(gè)RLock內(nèi)部維護(hù)著一個(gè)Lock和一個(gè)counter變量,counter記錄了acquire的次數(shù),從而使得資源可以被多次require。直到一個(gè)線程所有的acquire都被release,其他的線程才能獲得資源。
上面的例子如果使用RLock代替Lock,則不會(huì)發(fā)生死鎖,二者的區(qū)別是:遞歸鎖可以連續(xù)acquire多次,而互斥鎖只能acquire一次
fromthreadingimportThread,RLock
importtime
mutexA=mutexB=RLock()#一個(gè)線程拿到鎖,counter加1,該線程內(nèi)又碰到加鎖的情況,則counter繼續(xù)加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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 斯蒂里設(shè)計(jì)師專業(yè)體系構(gòu)建
- 《供應(yīng)鏈管理》課件
- 漁業(yè)資源利用效率提升考核試卷
- 運(yùn)維安全保密措施
- 糧食加工消防安全管理規(guī)定
- 糖果食品安全監(jiān)管考核試卷
- 小組介紹課件
- 糧食產(chǎn)業(yè)與制糖業(yè)的聯(lián)動(dòng)發(fā)展考核試卷
- 數(shù)字智慧方案5446丨企業(yè)碳資產(chǎn)管理策略及案例
- 中班親子活動(dòng)方案
- 2024年江蘇南京大數(shù)據(jù)集團(tuán)有限公司招聘筆試真題
- 北京2025年生態(tài)環(huán)境部衛(wèi)星環(huán)境應(yīng)用中心上半年招聘筆試歷年參考題庫(kù)附帶答案詳解
- 人教版八年級(jí)數(shù)學(xué)下冊(cè)試題第18章平行四邊形綜合測(cè)試卷(含詳解)
- 2025智慧病區(qū)建設(shè)及評(píng)價(jià)規(guī)范
- 湖南能源集團(tuán)有限公司招聘筆試題庫(kù)2025
- 渣漿泵培訓(xùn)課件
- 智能座艙試題解析及答案
- 2025春季學(xué)期國(guó)開(kāi)電大本科《人文英語(yǔ)3》一平臺(tái)在線形考綜合測(cè)試(形考任務(wù))試題及答案
- 中等職業(yè)學(xué)校物理教學(xué)大綱
- 靜脈輸血法并發(fā)癥的預(yù)防和處置
- 塔吊交叉作業(yè)安全技術(shù)交底
評(píng)論
0/150
提交評(píng)論