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

首頁 > 編程 > Python > 正文

對python多線程中互斥鎖Threading.Lock的簡單應用詳解

2020-02-16 00:36:03
字體:
來源:轉載
供稿:網友

一、線程共享進程資源

每個線程互相獨立,相互之間沒有任何關系,但是在同一個進程中的資源,線程是共享的,如果不進行資源的合理分配,對數據造成破壞,使得線程運行的結果不可預期。這種現象稱為“線程不安全”。

實例如下:

#-*- coding: utf-8 -*-import threadingimport time def test_xc():  f = open("test.txt","a")  f.write("test_dxc"+'/n')  time.sleep(1)  f.close() if __name__ == '__main__':  for i in xrange(5):    t = threading.Thread(target=test_xc)    t.start()

結果展示:

python多線程中互斥鎖Threading.Lock

二、互斥鎖同步

線程同步能夠保證多個線程安全訪問競爭資源,最簡單的同步機制是引入互斥鎖。互斥鎖為資源引入一個狀態:鎖定/非鎖定。某個線程要更改共享數據時,先將其鎖定,此時資源的狀態為“鎖定”,其他線程不能更改;直到該線程釋放資源,將資源的狀態變成“非鎖定”,其他的線程才能再次鎖定該資源。互斥鎖保證了每次只有一個線程進行寫入操作,從而保證了多線程情況下數據的正確性。

threading模塊中定義了Lock類,可以方便的處理鎖定:

#創建鎖mutex = threading.Lock()#鎖定mutex.acquire([timeout])#timeout是超時時間#釋放mutex.release()

其中,鎖定方法acquire可以有一個超時時間的可選參數timeout。如果設定了timeout,則在超時后通過返回值可以判斷是否得到了鎖,從而可以進行一些其他的處理。

三、使用線程鎖

<pre name="code" class="python">#-*- coding: utf-8 -*-import threadingimport time def test_xc():  f = open("test.txt","a")  f.write("test_dxc"+'/n')  time.sleep(1)  mutex.acquire()#取得鎖  f.close()  mutex.release()#釋放鎖 if __name__ == '__main__':  mutex = threading.Lock()#創建鎖  for i in xrange(5):    t = threading.Thread(target=test_xc)    t.start()

運行結果

python多線程中互斥鎖Threading.Lock

以上這篇對python多線程中互斥鎖Threading.Lock的簡單應用詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林站長站。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 霍山县| 清镇市| 凤山县| 清水县| 昌都县| 金乡县| 滕州市| 阿拉善右旗| 册亨县| 武邑县| 广灵县| 房产| 泊头市| 湖北省| 深水埗区| 县级市| 思南县| 弋阳县| 凤翔县| 会同县| 瑞昌市| 邳州市| 娱乐| 旺苍县| 石渠县| 双城市| 宁南县| 湖南省| 永春县| 郧西县| 金门县| 尚义县| 彭水| 新乡县| 东海县| 刚察县| 平陆县| 星座| 马公市| 宝山区| 涡阳县|