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

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

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

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

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

復(fù)制代碼 代碼如下:

'''
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()

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

復(fù)制代碼 代碼如下:

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ā)生死鎖:

代碼只需將上述的:

復(fù)制代碼 代碼如下:

mutex = threading.Lock()

替換成:
復(fù)制代碼 代碼如下:

mutex = threading.RLock()

即可。

相關(guān)文章

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

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

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

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

    這篇文章主要給大家介紹了關(guān)于python模塊導(dǎo)入細節(jié)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    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是帶標(biāo)簽的一維數(shù)組,可存儲整數(shù)、浮點數(shù)、字符串、Python 對象等類型的數(shù)據(jù),軸標(biāo)簽統(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ù)量。文中的代碼具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以關(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)賬場景這次趁熱學(xué)委展示一下使用隊列解決轉(zhuǎn)賬場景的問題,這篇文章主要介紹了Python的線程使用隊列來改造轉(zhuǎn)賬場景,需要的朋友可以參考一下
    2022-02-02
  • SpringMVC和SpringBoot接收參數(shù)的幾種方式詳解

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

    這篇文章主要介紹了SpringMVC和SpringBoot接收參數(shù)的幾種方式詳解,Spring是分層的JavaSE/EE應(yīng)用輕量級開源框架,以IoC和AOP為內(nèi)核,提供了展現(xiàn)層 Spring MVC和持久層Spring JDBC以及業(yè)務(wù)層事務(wù)管理等眾多的企業(yè)級應(yīng)用技術(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

最新評論

防城港市| 新兴县| 罗定市| 时尚| 上饶县| 平利县| 泗洪县| 颍上县| 汾西县| 大港区| 巴青县| 忻城县| 尤溪县| 伊通| 岚皋县| 固始县| 广平县| 资源县| 桦南县| 大兴区| 绥宁县| 宁城县| 成都市| 黄冈市| 汉沽区| 金溪县| 城固县| 长春市| 沅陵县| 张掖市| 汤阴县| 泸西县| 嵊州市| 重庆市| 高阳县| 青州市| 淳安县| 洪雅县| 瓦房店市| 云浮市| 礼泉县|