最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python多線程編程(五):死鎖的形成

 更新時間:2015年04月05日 11:36:23   投稿:junjie  
這篇文章主要介紹了Python多線程編程(五):死鎖的形成,本文講解了死鎖的概念、死鎖示例、避免死鎖的方法等內容,需要的朋友可以參考下

前一篇文章Python:使用threading模塊實現(xiàn)多線程編程四[使用Lock互斥鎖]我們已經開始涉及到如何使用互斥鎖來保護我們的公共資源了,現(xiàn)在考慮下面的情況–

如果有多個公共資源,在線程間共享多個資源的時候,如果兩個線程分別占有一部分資源并且同時等待對方的資源,這會引起什么問題?

死鎖概念

所謂死鎖: 是指兩個或兩個以上的進程在執(zhí)行過程中,因爭奪資源而造成的一種互相等待的現(xiàn)象,若無外力作用,它們都將無法推進下去。此時稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產生了死鎖,這些永遠在互相等待的進程稱為死鎖進程。 由于資源占用是互斥的,當某個進程提出申請資源后,使得有關進程在無外力協(xié)助下,永遠分配不到必需的資源而無法繼續(xù)運行,這就產生了一種特殊現(xiàn)象死鎖。

復制代碼 代碼如下:

'''
Created on 2012-9-8
 
@author: walfred
@module: thread.TreadTest5
'''  
import threading 
 
counterA = 0 
counterB = 0 
 
mutexA = threading.Lock() 
mutexB = threading.Lock() 
 
class MyThread(threading.Thread): 
    def __init__(self): 
        threading.Thread.__init__(self) 
 
    def run(self): 
        self.fun1() 
        self.fun2() 
 
    def fun1(self): 
        global mutexA, mutexB 
        if mutexA.acquire(): 
            print "I am %s , get res: %s" %(self.name, "ResA") 
 
            if mutexB.acquire(): 
                print "I am %s , get res: %s" %(self.name, "ResB") 
                mutexB.release() 
 
        mutexA.release()  
 
    def fun2(self): 
        global mutexA, mutexB 
        if mutexB.acquire(): 
            print "I am %s , get res: %s" %(self.name, "ResB") 
 
            if mutexA.acquire(): 
                print "I am %s , get res: %s" %(self.name, "ResA") 
                mutexA.release() 
 
        mutexB.release()  
 
if __name__ == "__main__": 
    for i in range(0, 100): 
        my_thread = MyThread() 
        my_thread.start()

代碼中展示了一個線程的兩個功能函數分別在獲取了一個競爭資源之后再次獲取另外的競爭資源,我們看運行結果:

復制代碼 代碼如下:

I am Thread-1 , get res: ResA
I am Thread-1 , get res: ResB
I am Thread-2 , get res: ResAI am Thread-1 , get res: ResB

可以看到,程序已經掛起在那兒了,這種現(xiàn)象我們就稱之為”死鎖“。

避免死鎖

避免死鎖主要方法就是:正確有序的分配資源,避免死鎖算法中最有代表性的算法是Dijkstra E.W 于1968年提出的銀行家算法。

相關文章

  • 使用pandas實現(xiàn)csv/excel sheet互相轉換的方法

    使用pandas實現(xiàn)csv/excel sheet互相轉換的方法

    今天小編就為大家分享一篇使用pandas實現(xiàn)csv/excel sheet互相轉換的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 詳解如何使用Python操作MySQL的各種功能和用法

    詳解如何使用Python操作MySQL的各種功能和用法

    當今互聯(lián)網時代,數據處理已經成為了一個非常重要的任務,而MySQL作為一款開源的關系型數據庫,被廣泛應用于各種場景,本篇博客將介紹如何使用Python操作MySQL的各種功能,以及一些高級用法,需要的朋友可以參考下
    2023-11-11
  • python使用tkinter調整label背景顏色的測試

    python使用tkinter調整label背景顏色的測試

    這篇文章主要介紹了python使用tkinter調整label背景顏色的測試方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python實現(xiàn)將n個點均勻地分布在球面上的方法

    Python實現(xiàn)將n個點均勻地分布在球面上的方法

    這篇文章主要介紹了Python實現(xiàn)將n個點均勻地分布在球面上的方法,涉及Python繪圖的技巧與相關數學函數的調用,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • python讀取excel指定列數據并寫入到新的excel方法

    python讀取excel指定列數據并寫入到新的excel方法

    今天小編就為大家分享一篇python讀取excel指定列數據并寫入到新的excel方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python圖像處理庫PIL的ImageFilter模塊使用介紹

    Python圖像處理庫PIL的ImageFilter模塊使用介紹

    這篇文章主要介紹了Python圖像處理庫PIL的ImageFilter模塊使用介紹,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • 使用卷積神經網絡(CNN)做人臉識別的示例代碼

    使用卷積神經網絡(CNN)做人臉識別的示例代碼

    這篇文章主要介紹了使用卷積神經網絡(CNN)做人臉識別的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • python文件夾分區(qū)的實現(xiàn)方法實例

    python文件夾分區(qū)的實現(xiàn)方法實例

    這篇文章主要給大家介紹了關于python文件夾分區(qū)的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • python 獲取當前目錄下的文件目錄和文件名實例代碼詳解

    python 獲取當前目錄下的文件目錄和文件名實例代碼詳解

    這篇文章主要介紹了python 獲取當前目錄下的文件目錄和文件名實例代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • python正則表達式中匹配次數與貪心問題詳解(+??*)

    python正則表達式中匹配次數與貪心問題詳解(+??*)

    正則表達式是一個特殊的字符序列,它能幫助你方便的檢查一個字符串是否與某種模式匹配,下面這篇文章主要給大家介紹了關于python正則表達式中匹配次數與貪心問題(+??*)的相關資料,需要的朋友可以參考下
    2022-10-10

最新評論

沙坪坝区| 文水县| 东乡| 金堂县| 牟定县| 潼南县| 渝中区| 綦江县| 湟中县| 城市| 韶关市| 永顺县| 阳谷县| 原阳县| 新巴尔虎右旗| 内江市| 合肥市| 桐城市| 临夏县| 海安县| 绥滨县| 石林| 杭锦后旗| 南皮县| 潜江市| 通江县| 固始县| 故城县| 镇康县| 绵阳市| 大石桥市| 同德县| 琼结县| 建始县| 凤翔县| 阿克陶县| 容城县| 垣曲县| 新乡县| 隆回县| 延庆县|