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

Python多線程編程(六):可重入鎖RLock

 更新時間:2015年04月05日 11:39:52   投稿:junjie  
這篇文章主要介紹了Python多線程編程(六):可重入鎖RLock,本文直接給出使用實例,然后講解如何使用RLock避免死鎖,需要的朋友可以參考下

考慮這種情況:如果一個線程遇到鎖嵌套的情況該怎么辦,這個嵌套是指當我一個線程在獲取臨界資源時,又需要再次獲取。

根據(jù)這種情況,代碼如下:

復制代碼 代碼如下:

'''
Created on 2012-9-8
 
@author: walfred
@module: thread.ThreadTest6
''' 
 
import threading 
import time 
 
counter = 0 
mutex = threading.Lock() 
 
class MyThread(threading.Thread): 
    def __init__(self): 
        threading.Thread.__init__(self) 
 
    def run(self): 
        global counter, mutex 
        time.sleep(1); 
        if mutex.acquire(): 
            counter += 1 
            print "I am %s, set counter:%s" % (self.name, counter) 
            if mutex.acquire(): 
                counter += 1 
                print "I am %s, set counter:%s" % (self.name, counter) 
                mutex.release() 
            mutex.release() 
 
if __name__ == "__main__": 
    for i in range(0, 200): 
        my_thread = MyThread() 
        my_thread.start()

這種情況的代碼運行情況如下:

復制代碼 代碼如下:

I am Thread-1, set counter:1

之后就直接掛起了,這種情況形成了最簡單的死鎖。

那有沒有一種情況可以在某一個線程使用互斥鎖訪問某一個競爭資源時,可以再次獲取呢?在Python中為了支持在同一線程中多次請求同一資源,python提供了“可重入鎖”:threading.RLock。這個RLock內(nèi)部維護著一個Lock和一個counter變量,counter記錄了acquire的次數(shù),從而使得資源可以被多次require。直到一個線程所有的acquire都被release,其他的線程才能獲得資源。上面的例子如果使用RLock代替Lock,則不會發(fā)生死鎖:

代碼只需將上述的:

復制代碼 代碼如下:

mutex = threading.Lock()

替換成:
復制代碼 代碼如下:

mutex = threading.RLock()

即可。

相關(guān)文章

  • python日記(使用TCP實現(xiàn)的對話客戶端和服務器)

    python日記(使用TCP實現(xiàn)的對話客戶端和服務器)

    這篇文章主要為大家介紹了python使用TCP實現(xiàn)的對話客戶端和服務器實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • python模塊導入的細節(jié)詳解

    python模塊導入的細節(jié)詳解

    這篇文章主要給大家介紹了關(guān)于python模塊導入細節(jié)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12
  • 深入淺析python的第三方庫pandas

    深入淺析python的第三方庫pandas

    這篇文章主要介紹了python的第三方庫pandas的相關(guān)知識,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • Python數(shù)據(jù)處理之pd.Series()函數(shù)的基本使用

    Python數(shù)據(jù)處理之pd.Series()函數(shù)的基本使用

    Series是帶標簽的一維數(shù)組,可存儲整數(shù)、浮點數(shù)、字符串、Python 對象等類型的數(shù)據(jù),軸標簽統(tǒng)稱為索引,下面這篇文章主要給大家介紹了關(guān)于Python數(shù)據(jù)處理之pd.Series()函數(shù)的基本使用,需要的朋友可以參考下
    2022-06-06
  • Python+OpenCV實戰(zhàn)之利用?K-Means?聚類進行色彩量化

    Python+OpenCV實戰(zhàn)之利用?K-Means?聚類進行色彩量化

    這篇文章主要介紹了如何利用?K-Means?聚類進行色彩量化,以減少圖像中顏色數(shù)量。文中的代碼具有一定的學習價值,感興趣的小伙伴可以關(guān)注一下
    2021-12-12
  • python中列表添加的四種方法小結(jié)

    python中列表添加的四種方法小結(jié)

    這篇文章主要介紹了python中列表添加的四種方法小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python的線程使用隊列Queue來改造轉(zhuǎn)賬場景

    Python的線程使用隊列Queue來改造轉(zhuǎn)賬場景

    前篇我們了隊列Queue和轉(zhuǎn)賬場景這次趁熱學委展示一下使用隊列解決轉(zhuǎn)賬場景的問題,這篇文章主要介紹了Python的線程使用隊列來改造轉(zhuǎn)賬場景,需要的朋友可以參考一下
    2022-02-02
  • SpringMVC和SpringBoot接收參數(shù)的幾種方式詳解

    SpringMVC和SpringBoot接收參數(shù)的幾種方式詳解

    這篇文章主要介紹了SpringMVC和SpringBoot接收參數(shù)的幾種方式詳解,Spring是分層的JavaSE/EE應用輕量級開源框架,以IoC和AOP為內(nèi)核,提供了展現(xiàn)層 Spring MVC和持久層Spring JDBC以及業(yè)務層事務管理等眾多的企業(yè)級應用技術(shù),需要的朋友可以參考下
    2023-07-07
  • 利用Python獲取操作系統(tǒng)信息實例

    利用Python獲取操作系統(tǒng)信息實例

    作為一個運維人員,經(jīng)常需要獲取系統(tǒng)的的各種信息,使用python會很方便幫助獲得,這篇文章運用實例告訴大家如何利用Python來獲取操作系統(tǒng)的信息,有需要的可以參考借鑒。
    2016-09-09
  • Python簡單讀寫Xls格式文檔的方法示例

    Python簡單讀寫Xls格式文檔的方法示例

    這篇文章主要介紹了Python簡單讀寫Xls格式文檔的方法,結(jié)合實例形式分析了Python中xlrd和xlwt模塊的安裝及針對xls格式文檔的相關(guān)讀寫操作實現(xiàn)技巧,需要的朋友可以參考下
    2018-08-08

最新評論

清涧县| 天门市| 秦安县| 阿拉善右旗| 无棣县| 广元市| 蒙阴县| 马龙县| 格尔木市| 凤阳县| 阿拉尔市| 遵义县| 泰宁县| 上林县| 安康市| 砚山县| 乐山市| 大田县| 垦利县| 海宁市| 新宾| 凤城市| 凤凰县| 静海县| 喀喇沁旗| 嘉鱼县| 南开区| 福鼎市| 航空| 东乌珠穆沁旗| 厦门市| 大悟县| 钦州市| 德令哈市| 东阳市| 元谋县| 兖州市| 屏东市| 原阳县| 铜川市| 大方县|