婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 在python中解決死鎖的問題

在python中解決死鎖的問題

熱門標簽:蘇州人工外呼系統軟件 打印谷歌地圖標注 廣東旅游地圖標注 淮安呼叫中心外呼系統如何 佛山通用400電話申請 京華圖書館地圖標注 電話機器人貸款詐騙 看懂地圖標注方法 電話外呼系統招商代理

1.添加超時時間:

fromthreading import Thread, Lock
importtime 
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()
            break
        else:
            # 表示對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.附錄-銀行家算法( 不要求,理解就可以)

背景知識

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

問題的描述

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

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

對于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,Lock
import time
mutexA=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,RLock
import time
mutexA=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:\python\python_sdk\python.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

或者如下的效果:

來解釋下遞歸鎖的代碼:

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

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

您可能感興趣的文章:
  • python 多線程死鎖問題的解決方案
  • 淺談python鎖與死鎖問題
  • Python 防止死鎖的方法
  • 淺談Python線程的同步互斥與死鎖
  • Python Threading 線程/互斥鎖/死鎖/GIL鎖
  • 利用Python+Java調用Shell腳本時的死鎖陷阱詳解
  • Python中死鎖的形成示例及死鎖情況的防止
  • 舉例講解Python中的死鎖、可重入鎖和互斥鎖

標簽:駐馬店 呼和浩特 湖州 畢節 股票 中山 江蘇 衡水

巨人網絡通訊聲明:本文標題《在python中解決死鎖的問題》,本文關鍵詞  在,python,中,解決,死鎖,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《在python中解決死鎖的問題》相關的同類信息!
  • 本頁收集關于在python中解決死鎖的問題的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    中文字幕色av一区二区三区| 宅男在线国产精品| 国内一区二区视频| 老司机精品视频在线| 日本亚洲欧美天堂免费| 亚洲成人动漫在线观看| 亚洲mv在线观看| 日本色综合中文字幕| 天天综合色天天综合色h| 亚洲国产一区二区视频| 日日欢夜夜爽一区| 蜜臀av性久久久久蜜臀aⅴ | 丁香五精品蜜臀久久久久99网站| 国内精品伊人久久久久av影院| 狠狠久久亚洲欧美| 大尺度一区二区| 91丨九色丨尤物| 欧美自拍丝袜亚洲| 欧美一级二级在线观看| 26uuu精品一区二区三区四区在线| 2欧美一区二区三区在线观看视频| 久久色.com| 一区二区在线观看av| 亚洲国产成人av网| 国产一区二区精品久久| 99精品国产99久久久久久白柏| 在线观看一区二区视频| 精品国产免费久久| 亚洲日本乱码在线观看| 午夜久久久影院| 国产精品77777竹菊影视小说| 一本大道av一区二区在线播放| 欧美酷刑日本凌虐凌虐| 欧美国产日本视频| 日韩不卡一二三区| 不卡大黄网站免费看| 欧美日韩一区二区三区高清| 欧美激情自拍偷拍| 视频在线观看国产精品| 成人一二三区视频| 欧美一区二区三区男人的天堂| 国产精品久久久久久久久久久免费看 | 国模一区二区三区白浆| 色综合久久中文字幕综合网 | 国产91精品精华液一区二区三区| 欧美专区日韩专区| 国产精品色噜噜| 久久成人羞羞网站| 欧美日韩免费高清一区色橹橹| 国产嫩草影院久久久久| 麻豆国产一区二区| 色丁香久综合在线久综合在线观看| 日韩片之四级片| 日日摸夜夜添夜夜添亚洲女人| 99精品一区二区三区| 久久影院电视剧免费观看| 视频在线在亚洲| 精品视频一区三区九区| 亚洲黄网站在线观看| 成人福利在线看| 国产日产欧美一区| 国产毛片精品国产一区二区三区| 欧美疯狂性受xxxxx喷水图片| 亚洲永久免费视频| 在线免费观看一区| 亚洲一区欧美一区| 在线精品观看国产| 亚洲综合小说图片| 欧洲另类一二三四区| 一区二区三区高清在线| 日本电影亚洲天堂一区| 亚洲日穴在线视频| 一本大道综合伊人精品热热 | 一区二区高清在线| 色天天综合色天天久久| 亚洲视频香蕉人妖| 色婷婷一区二区三区四区| 亚洲柠檬福利资源导航| 日本丶国产丶欧美色综合| 一区二区三区精品视频在线| 欧美色图一区二区三区| 五月综合激情日本mⅴ| 日韩一级片网址| 国产麻豆欧美日韩一区| 国产精品毛片高清在线完整版| av日韩在线网站| 亚洲一区国产视频| 日韩欧美国产一二三区| 国产一区二区网址| 欧美极品xxx| 欧美视频一区二| 蜜桃视频一区二区三区| 久久久久久免费| av亚洲精华国产精华精华| 亚洲最新视频在线播放| 日韩一区二区三区免费观看| 韩国一区二区三区| 欧美经典一区二区三区| 日本高清视频一区二区| 捆绑调教美女网站视频一区| 久久综合av免费| 色成年激情久久综合| 麻豆精品视频在线| 自拍偷拍亚洲综合| 日韩精品在线网站| 色狠狠桃花综合| 国精品**一区二区三区在线蜜桃| 国产精品久久久久久久久快鸭| 欧美猛男男办公室激情| 成人免费福利片| 日韩高清在线不卡| 国产精品国产馆在线真实露脸 | 色综合天天在线| 久久99久久久欧美国产| 18欧美亚洲精品| 欧美www视频| 欧美午夜精品久久久久久超碰| 国产成人亚洲精品青草天美| 丝袜国产日韩另类美女| 亚洲天堂精品视频| 久久久精品综合| 日韩一级黄色片| 91福利国产成人精品照片| 国产一区二区福利视频| 奇米影视7777精品一区二区| ...xxx性欧美| 国产欧美一区在线| 亚洲精品一区二区三区四区高清 | 午夜伊人狠狠久久| 亚洲欧美另类久久久精品2019| 久久婷婷久久一区二区三区| 日韩限制级电影在线观看| 欧美网站大全在线观看| 91在线视频官网| 成人app网站| 国产精品456露脸| 国产一区二区三区四区在线观看| 日韩国产精品久久久| 亚洲一二三级电影| 一区二区三区欧美日韩| 一区二区三区中文字幕电影| 国产精品第四页| 国产精品狼人久久影院观看方式| 久久综合久久99| 国产日韩av一区| 国产精品免费视频一区| 国产精品久久久久永久免费观看 | 色吊一区二区三区| 91福利社在线观看| 欧美综合欧美视频| 欧美久久一区二区| 欧美一区二区大片| 精品国免费一区二区三区| 精品福利在线导航| 国产精品免费av| 亚洲精品菠萝久久久久久久| 一区二区三区成人| 日韩电影在线免费| 韩国精品久久久| 国产成人午夜99999| 99国产精品久久久久久久久久 | 欧美久久久久久久久| 欧美高清性hdvideosex| 欧美一区二区视频在线观看2022 | 久久午夜免费电影| 国产精品久久久久久久久果冻传媒 | 免费在线欧美视频| 国产精品一区二区在线观看不卡| 国产成人在线视频网址| 色欲综合视频天天天| 欧美日韩国产综合视频在线观看| 欧美一级高清大全免费观看| 中文字幕第一区二区| 亚洲狠狠爱一区二区三区| 激情国产一区二区| 色综合天天综合色综合av | 《视频一区视频二区| 性久久久久久久久久久久| 国产米奇在线777精品观看| 99视频精品免费视频| 日韩欧美国产综合| 国产精品乱码久久久久久| 亚洲高清免费在线| 国产麻豆成人传媒免费观看| 一本一本久久a久久精品综合麻豆| 91精品欧美综合在线观看最新| 国产精品视频线看| 日韩国产精品久久久久久亚洲| 国产精品18久久久久久vr| 精品视频在线视频| 欧美激情在线观看视频免费| 婷婷久久综合九色综合伊人色| 国产成人免费高清| 在线不卡欧美精品一区二区三区| 久久久久国产精品免费免费搜索| 天天影视色香欲综合网老头| 成人av资源站| 精品国产免费一区二区三区四区| 亚洲一区二区三区四区五区中文| 成人精品电影在线观看|