亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

固安县| 武隆县| 海南省| 泽州县| 东山县| 闸北区| 深水埗区| 榆林市| 信宜市| 红原县| 青岛市| 永定县| 寻甸| 五莲县| 调兵山市| 泾川县| 西吉县| 蕉岭县| 万山特区| 高碑店市| 佛山市| 常宁市| 牟定县| 斗六市| 赫章县| 章丘市| 嘉兴市| 长治市| 通榆县| 莱西市| 岢岚县| 巩留县| 安阳市| 油尖旺区| 若尔盖县| 铅山县| 绥中县| 保山市| 庆安县| 嘉黎县| 通城县|