中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python使用鎖訪問共享變量實例解析

發布時間:2020-10-05 15:41:03 來源:腳本之家 閱讀:133 作者:零丁若嘆 欄目:開發技術

本文研究的主要是python使用鎖訪問共享變量,具體介紹和實現如下。

python 做多線程編程時,多個線程若同時訪問某個變量,可能會對變量數據造成破壞,pyhon中的threading模塊提供了lock對象,lock中的acquire方法用于獲取一個鎖,而release用于釋放一個鎖。當一個線程取得鎖時,它變獲得了共享變量的訪問權,此時進入阻塞狀態,若其它線程申請訪問這個變量,則必須等到這個線程調用release方法釋放這個鎖。下面是python中使用鎖的實例:

#!/usr/bin/env python 
import threading,time 
q=threading.Lock()  #create a lock object 
def mythread(): 
  global a 
  q.acquire()   #acquire the lock 
  a=threading.currentThread().getName() 
  print "a is modified by",a 
  q.release()   #release the lock 
   
for i in range(1,4): 
  t=threading.Thread(target=mythread,name="Thread %d"%i) 
  t.start() 

如果一個線程想多次獲取資源訪問權,在上面的程序中連續兩次使用acquire() ,將會造成死鎖現象,因為第一次申請到的資源還沒有來得及釋放,就進行了第二次申請。python中的threading模塊提供了可重入鎖RLock,RLock提供了計數器。一個線程申請到某個資源,計數器會加1,釋放掉這個資源計數器會減1.這樣,一個線程可以多次請求同一個資源,在所有請求都被釋放后,其它線程才允許獲取這個鎖。上面的代碼做簡單修改,可得:

#!/usr/bin/env python 
import threading,time 
q=threading.RLock()    #create a lock object 
def mythread(): 
  global a 
  q.acquire()    #acquire the lock 
  a=threading.currentThread().getName() 
  print "a is modified by",a 
  q.acquire() 
  a=threading.currentThread().getName() 
  print "a is modified by %s the second time"% a 
  q.release()    
  q.release()    #release the lock 
for i in range(1,4): 
  t=threading.Thread(target=mythread,name="Thread %d"%i) 
  t.start() 

總結

以上就是本文關于python使用鎖訪問共享變量實例解析的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

霍州市| 大方县| 石柱| 金川县| 伊川县| 牡丹江市| 玛多县| 枝江市| 抚顺县| 漳州市| 凤山县| 屯门区| 平陆县| 富锦市| 乐业县| 双牌县| 文化| 四子王旗| 宁阳县| 樟树市| 扶余县| 乐山市| 师宗县| 尼木县| 肇庆市| 乐昌市| 白城市| 阿城市| 甘泉县| 鲁山县| 滨海县| 镇雄县| 泉州市| 且末县| 济阳县| 太原市| 内江市| 同仁县| 江西省| 化州市| 永德县|