日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

在python中解決死鎖的問題

瀏覽:39日期:2022-06-22 13:44:32
1.添加超時時間:

fromthreading import Thread, Lockimporttime mutex1= Lock() # 創建一個互斥鎖mutex2= Lock() # 創建一個互斥鎖

def fun1(): while True:mutex1.acquire()print('線程1 鎖住了mutex1')time.sleep(0.1) result =mutex2.acquire(timeout=1) # timeout指明acquire等的最長超時時間# result = mutex2.acquire(False) # 非阻塞if result: # 表示對mutex2成功上鎖 print('線程1 鎖住了mutex2') print('線程1 hello') mutex1.release() mutex2.release() breakelse: # 表示對mutex2上鎖失敗 mutex1.release() # 將mutex1釋放,保證別人能夠執行 time.sleep(0.1)

def fun2(): mutex2.acquire() print('線程2 鎖住了mutex2') time.sleep(0.1) mutex1.acquire() print('線程2 鎖住了mutex1') print('線程2 hi') mutex1.release() mutex2.release()2.附錄-銀行家算法( 不要求,理解就可以)背景知識

一個銀行家如何將一定數目的資金安全地借給若干個客戶,使這些客戶既能借到錢完成要干的事,同時銀行家又能收回全部資金而不至于破產,這就是銀行家問題。這個問題同操作系統中資源分配問題十分相似:銀行家就像一個操作系統,客戶就像運行的進程,銀行家的資金就是系統的資源。

問題的描述

一個銀行家擁有一定數量的資金,有若干個客戶要貸款。每個客戶須在一開始就聲明他所需貸款的總額。若該客戶貸款總額不超過銀行家的資金總數,銀行家可以接收客戶的要求??蛻糍J款是以每次一個資金單位(如1萬RMB等)的方式進行的,客戶在借滿所需的全部單位款額之前可能會等待,但銀行家須保證這種等待是有限的,可完成的。

例如:有三個客戶C1,C2,C3,向銀行家借款,該銀行家的資金總額為10個資金單位,其中C1客戶要借9各資金單位,C2客戶要借3個資金單位,C3客戶要借8個資金單位,總計20個資金單位。某一時刻的狀態如圖所示。

在python中解決死鎖的問題

對于a圖的狀態,按照安全序列的要求,我們選的第一個客戶應滿足該客戶所需的貸款小于等于銀行家當前所剩余的錢款,可以看出只有C2客戶能被滿足:C2客戶需1個資金單位,小銀行家手中的2個資金單位,于是銀行家把1個資金單位借給C2客戶,使之完成工作并歸還所借的3個資金單位的錢,進入b圖。同理,銀行家把4個資金單位借給C3客戶,使其完成工作,在c圖中,只剩一個客戶C1,它需7個資金單位,這時銀行家有8個資金單位,所以C1也能順利借到錢并完成工作。最后(見圖d)銀行家收回全部10個資金單位,保證不賠本。那麼客戶序列{C1,C2,C3}就是個安全序列,按照這個序列貸款,銀行家才是安全的。否則的話,若在圖b狀態時,銀行家把手中的4個資金單位借給了C1,則出現不安全狀態:這時C1,C3均不能完成工作,而銀行家手中又沒有錢了,系統陷入僵持局面,銀行家也不能收回投資。

綜上所述,銀行家算法是從當前狀態出發,逐個按安全序列檢查各客戶誰能完成其工作,然后假定其完成工作且歸還全部貸款,再進而檢查下一個能完成工作的客戶,......。如果所有客戶都能完成工作,則找到一個安全序列,銀行家才是安全的。

補充:python基礎-死鎖、遞歸鎖

死鎖

所謂死鎖:是指兩個或兩個以上的進程或線程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處于死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱為死鎖進程

from threading import Thread,Lockimport timemutexA=Lock()mutexB=Lock()class MyThread(Thread): def run(self):self.func1()self.func2() def func1(self):mutexA.acquire()print(’033[41m%s 拿到A鎖033[0m’ %self.name)mutexB.acquire()print(’033[42m%s 拿到B鎖033[0m’ %self.name)mutexB.release()mutexA.release() def func2(self):mutexB.acquire()print(’033[43m%s 拿到B鎖033[0m’ %self.name)time.sleep(2)mutexA.acquire()print(’033[44m%s 拿到A鎖033[0m’ %self.name)mutexA.release()mutexB.release()if __name__ == ’__main__’: for i in range(5):t=MyThread()t.start()

輸出如下:

Thread-1 拿到A鎖

Thread-1 拿到B鎖

Thread-1 拿到B鎖

Thread-2 拿到A鎖

分析如上代碼是如何產生死鎖的:

啟動5個線程,執行run方法,假如thread1首先搶到了A鎖,此時thread1沒有釋放A鎖,緊接著執行代碼mutexB.acquire(),搶到了B鎖,在搶B鎖時候,沒有其他線程與thread1爭搶,因為A鎖沒有釋放,其他線程只能等待,然后A鎖就執行完func1代碼,然后繼續執行func2代碼,與之同時,在func2中,執行代碼 mutexB.acquire(),搶到了B鎖,然后進入睡眠狀態,在thread1執行完func1函數,釋放AB鎖時候,其他剩余的線程也開始搶A鎖,執行func1代碼,如果thread2搶到了A鎖,接下來thread2要搶B鎖,ok,在這個時間段,thread1已經執行func2搶到了B鎖,然后在sleep(2),持有B鎖沒有釋放,為什么沒有釋放,因為沒有其他的線程與之爭搶,他只能睡著,然后thread1握著B鎖,thread2要搶B鎖,ok,這樣就形成了死鎖

遞歸鎖

我們分析了死鎖,那么python里面是如何解決這樣的遞歸鎖呢?

在Python中為了支持在同一線程中多次請求同一資源,python提供了可重入鎖RLock。

這個RLock內部維護著一個Lock和一個counter變量,counter記錄了acquire的次數,從而使得資源可以被多次require。直到一個線程所有的acquire都被release,其他的線程才能獲得資源。上面的例子如果使用RLock代替Lock,則不會發生死鎖:

from threading import Thread,Lock,RLockimport timemutexA=mutexB=RLock()class MyThread(Thread): def run(self):self.f1()self.f2() def f1(self):mutexA.acquire()print(’%s 拿到A鎖’ %self.name)mutexB.acquire()print(’%s 拿到B鎖’ %self.name)mutexB.release()mutexA.release() def f2(self):mutexB.acquire()print(’%s 拿到B鎖’ % self.name)time.sleep(0.1)mutexA.acquire()print(’%s 拿到A鎖’ % self.name)mutexA.release()mutexB.release()if __name__ == ’__main__’: for i in range(5):t=MyThread()t.start()

輸出代碼如下:

E:pythonpython_sdkpython.exe 'E:/python/py_pro/3 死鎖現象與遞歸鎖.py'

Thread-1 拿到A鎖

Thread-1 拿到B鎖

Thread-1 拿到B鎖

Thread-1 拿到A鎖

Thread-2 拿到A鎖

Thread-2 拿到B鎖

Thread-2 拿到B鎖

Thread-2 拿到A鎖

Thread-4 拿到A鎖

Thread-4 拿到B鎖

Thread-4 拿到B鎖

Thread-4 拿到A鎖

Thread-3 拿到A鎖

Thread-3 拿到B鎖

Thread-3 拿到B鎖

Thread-3 拿到A鎖

Thread-5 拿到A鎖

Thread-5 拿到B鎖

Thread-5 拿到B鎖

Thread-5 拿到A鎖

Process finished with exit code 0

或者如下的效果:

在python中解決死鎖的問題

來解釋下遞歸鎖的代碼:

由于鎖A,B是同一個遞歸鎖,thread1拿到A,B鎖,counter記錄了acquire的次數2次,然后在func1執行完畢,就釋放遞歸鎖,在thread1釋放完遞歸鎖,執行完func1代碼,接下來會有2種可能,1、thread1在次搶到遞歸鎖,執行func2代碼 2、其他的線程搶到遞歸鎖,去執行func1的任務代碼

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
伊人久久大香线蕉av超碰演员| 亚洲一级影院| 99免费精品| 日本精品不卡| 亚洲高清久久| 一区三区视频| 在线精品亚洲| 日本在线一区二区三区| 日韩成人一级| 国产精品传媒麻豆hd| 久久久免费人体| 裤袜国产欧美精品一区| 激情久久久久久| 久热精品在线| 日韩av网站免费在线| 国产精品日本一区二区三区在线| 国产欧美日韩精品一区二区免费 | 国产精品亚洲人成在99www| 日本午夜精品视频在线观看| 国产亚洲欧美日韩精品一区二区三区| 国产精选一区| 国产91在线播放精品| 视频福利一区| 黄色亚洲精品| 日本一不卡视频| 久久永久免费| 蜜臀av免费一区二区三区| 噜噜噜久久亚洲精品国产品小说| 亚洲无线观看| 久久久精品区| 国产高清一区二区| 日本免费新一区视频| 国产精品精品| 久久亚洲欧美| 狂野欧美性猛交xxxx| 久久国产直播| 亚洲三级网址| 成人在线超碰| 中文欧美日韩| 久久不见久久见中文字幕免费| 深夜视频一区二区| 日韩欧美另类中文字幕| 精品美女在线视频| 私拍精品福利视频在线一区| 亚洲视频国产| 色婷婷色综合| 免费人成在线不卡| 久久这里只有精品一区二区| 亚洲精品小说| 麻豆成人在线观看| 欧洲毛片在线视频免费观看| 日韩精品中文字幕吗一区二区 | 久久精品国产99国产| 国精品一区二区三区| 亚洲精品九九| 91青青国产在线观看精品| 日韩中文字幕麻豆| 精品精品久久| 亚洲tv在线| 欧美日韩尤物久久| 日韩av一区二| 一区二区三区视频免费观看| 国产欧美一区二区色老头| 一区二区三区四区在线看| 国产亚洲欧美日韩在线观看一区二区| 欧美高清一区| 美女毛片一区二区三区四区最新中文字幕亚洲| 欧美成人日韩| 久久av中文| 9久re热视频在线精品| 精品国产精品久久一区免费式 | 婷婷亚洲五月色综合| 欧美激情麻豆| 午夜在线一区二区| 精品国产第一福利网站| 日韩精品成人| 狠狠干成人综合网| 国产成人77亚洲精品www| 亚洲精品伊人| 午夜视频精品| 欧美久久天堂| 日产欧产美韩系列久久99| 激情久久五月| 日韩国产欧美| 精品亚洲成人| 国产欧美一级| 日本欧美在线看| 日本精品在线中文字幕| 国产精品红桃| 综合欧美精品| 亚洲一区网站| 蜜臀久久99精品久久一区二区| 精品国产99| 欧美久久久网站| 亚洲一区二区三区久久久| 欧美+日本+国产+在线a∨观看| 美腿丝袜亚洲三区| 日本成人在线视频网站| 亚洲影视一区| 免费精品视频在线| 精品一区在线| 久久精品欧美一区| 国产一区2区| 精品中国亚洲| 欧美经典一区| 国产日本亚洲| 国产欧美日韩精品高清二区综合区| 亚洲精品第一| 日韩精品福利一区二区三区| 亚洲综合中文| 一本综合精品| 亚洲在线国产日韩欧美| 最新日韩av| 欧美精品一区二区久久| 国产综合色产| 在线视频精品| 美国欧美日韩国产在线播放| 午夜亚洲一区| 亚洲精品综合| 日韩av中文字幕一区二区三区| 一二三区精品| 日韩欧美久久| 亚洲精品福利| 日韩一区二区三区精品| 日韩一区网站| 欧美另类中文字幕| 欧美一级网站| 国产精品黄网站| 精品色999| 日韩国产欧美| 亚洲国产不卡| 亚洲天堂日韩在线| 97精品国产99久久久久久免费| 欧美一级二级视频| 国产麻豆一区二区三区精品视频| 欧美激情视频一区二区三区免费| 精品一区二区男人吃奶| 国产日韩电影| 91高清一区| 亚洲午夜国产成人| 欧美在线91| 国产精品久久久久毛片大屁完整版 | 欧美日韩夜夜| 精品一区视频| 久久精品影视| 丝袜美腿亚洲一区二区图片| 日本在线视频一区二区| 国产精品嫩草影院在线看| 精品久久中文| 精品在线91| 日韩一区二区三区免费视频| 欧美成人一二区| 九九精品调教| 国产精品视区| 国产美女久久| 特黄特色欧美大片| 中文字幕一区二区精品区| 国产精品玖玖玖在线资源| 特黄毛片在线观看| 国产精品丝袜xxxxxxx| 欧美一区成人| 欧美男人天堂| 中文一区一区三区免费在线观 | 亚洲精品综合| 久久亚洲黄色| 欧美日韩国产综合网| 日本欧美久久久久免费播放网| 国产一区丝袜| 亚洲激精日韩激精欧美精品| 7777精品| 丝袜av一区| 亚洲精品国产精品粉嫩| 福利精品一区| 99在线|亚洲一区二区| 日韩黄色在线观看| 麻豆理论在线观看| 亚洲尤物av| 国产成人精品一区二区三区免费| 不卡一区2区| 日本一区二区三区视频在线看| 精品日本视频| 久久国产精品久久久久久电车| 国产欧美在线| 五月精品视频| 久久亚洲精品中文字幕| 免费观看久久av| 国产色噜噜噜91在线精品| 99久久99久久精品国产片果冰 | 日本一区福利在线| 国产日韩电影| 91久久精品无嫩草影院| 91精品一区二区三区综合在线爱| 日韩精品免费一区二区夜夜嗨| 青青青免费在线视频| 偷拍亚洲精品| 久久三级福利| 国产精品观看| 三级欧美在线一区| 婷婷综合六月| 欧美日韩xxxx|