国产探花免费观看_亚洲丰满少妇自慰呻吟_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使用鎖訪問共享變量實例解析的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 家居| 清苑县| 海丰县| 博罗县| 荆门市| 新闻| 九龙坡区| 个旧市| 延川县| 宕昌县| 鄯善县| 新河县| 荆门市| 临沭县| 襄樊市| 诸城市| 米林县| 永定县| 济宁市| 宜黄县| 凤台县| 阿瓦提县| 越西县| 烟台市| 唐海县| 哈尔滨市| 腾冲县| 七台河市| 东乡县| 东至县| 湘潭县| 靖江市| 老河口市| 滕州市| 平罗县| 惠水县| 抚松县| 罗田县| 恩平市| 西和县| 华坪县|