国产探花免费观看_亚洲丰满少妇自慰呻吟_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的簡單應用詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林站長站。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 中牟县| 龙里县| 耒阳市| 龙门县| 威信县| 武功县| 新郑市| 嘉义市| 宁化县| 眉山市| 祁连县| 延长县| 五家渠市| 区。| 南充市| 弥渡县| 仙居县| 临泽县| 长春市| 嘉义市| 修水县| 仁怀市| 格尔木市| 大洼县| 鲁山县| 汝阳县| 遂昌县| 静海县| 英吉沙县| 马关县| 元阳县| 犍为县| 信阳市| 贵溪市| 镇巴县| 友谊县| 峨边| 含山县| 垦利县| 洛宁县| 漳浦县|