溫馨提示×

溫馨提示×

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

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

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

發布時間:2021-09-02 10:53:54 來源:億速云 閱讀:257 作者:chen 欄目:開發技術

這篇文章主要講解了“python多線程中互斥鎖Threading.Lock的簡單應用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“python多線程中互斥鎖Threading.Lock的簡單應用”吧!

一、線程共享進程資源

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

實例如下:

#-*- coding: utf-8 -*-
import threading
import 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的簡單應用

二、互斥鎖同步

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

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

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

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

三、使用線程鎖

<pre name="code" class="python">#-*- coding: utf-8 -*-
import threading
import 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的簡單應用”的內容了,經過本文的學習后,相信大家對python多線程中互斥鎖Threading.Lock的簡單應用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女