Python3-為多執行緒上鎖
阿新 • • 發佈:2019-02-01
#在threading模組當中,定義一個Lock類,可以方便的處理鎖定:(執行緒之間的鎖是互斥的)
#互斥鎖 ''' 當多個執行緒幾乎同時修改某一個共享資料的時候,需要進行同步控制。 執行緒同步能夠保證多個執行緒安全訪問“競爭資源”,最簡單的同步機制就是引用互斥鎖。 互斥鎖為資源引入一個狀態:鎖定/非鎖定狀態。 某個執行緒要更改共享資料時,先將其鎖定,此時資源的狀態為“鎖定”,其它執行緒不能更改; 直到當前執行緒釋放資源,將資源變成"非鎖定"狀態,其它的執行緒才能再次鎖定該資源。 互斥鎖保證了每次只有一個執行緒進行“寫操作”,從而保證多個執行緒資料正確性。 ''' #上鎖/解鎖過程 ''' 當一個執行緒呼叫鎖的acquire()方法獲取鎖時,鎖就進行“鎖定(Locked)”狀態。 每次只有一個執行緒可以獲得這個鎖。如果此時另一個執行緒試圖獲取鎖中的資源,該執行緒就會變為“阻塞”狀態。 直到擁有鎖的那個執行緒執行release(),鎖就變成“非鎖定(Unlocked)”狀態。 執行緒除錯程式從處於同步阻塞狀態的執行緒中選擇一個來獲得鎖,並使得該執行緒進入“執行(running)”狀態。 '''from threading import Lockfrom threading import Threadimport time#全域性變數g_num=0def w1(): global# #1、建立鎖 # mutex = threading.Lock() # # #2.鎖定 # mutex.acquire(True/Flase) ''' True:如果所要獲取的資源已經“鎖定”,表示當前執行緒處地等待(阻塞),直到獲取到這個鎖為止--預設值 False:不阻塞,即不管本次呼叫能夠成功上鎖,都不會卡在這,而是繼續執行後面的程式碼。 ''' # # #3.解鎖 # mutex.release()
if m_flag: g_num += 1
/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 /Users/apple/PycharmProjects/stage4/thread/t11.py
w2---g_num=1871349
w1---g_num=2000000
Process finished with exit code 0
========================