国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2020-02-22 23:10:40
字體:
來源:轉載
供稿:網友

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平陆县| 长泰县| 贺兰县| 海盐县| 中山市| 六安市| 根河市| 临泉县| 宁都县| 丹凤县| 双城市| 宜良县| 蕲春县| 屯昌县| 金川县| 宜兰县| 宝兴县| 皋兰县| 临江市| 乡城县| 长顺县| 商丘市| 满城县| 喀喇沁旗| 瑞昌市| 乌拉特中旗| 西充县| 杭州市| 龙井市| 铜陵市| 阿图什市| 百色市| 苏尼特右旗| 孝感市| 长宁县| 湘西| 天门市| 九龙县| 兴城市| 乳源| 区。|