線程鎖,遞歸鎖
阿新 • • 發佈:2018-10-23
全部 res 分享圖片 reads The imp 主線程 threading alt
##線程鎖應用
import time,threading python中自己加鎖了所以用不著! def run(n): lock.acquire() #獲取一把鎖 global num num+=1 lock.release() #釋放鎖 lock=threading.Lock() num=0 loot=[] #創建一個空列表(存線程實例) for i in range (50): t=threading.Thread(target=run,args=("t-%s"%i,)) t.start() loot.append(t) #為了不阻塞後面的線程啟動,不在這裏join,先放到一個列表裏 for t in loot:#循環線程實例列表,等待所有線程執行完畢 t.join() #等待一個線程全部執行完再執行其他線程(把並程改成了串行) print("-----ddddd-----",threading.current_thread(),threading.active_count())#看是否是主線程,活躍的線程數量 print("num:",num)
##遞歸鎖的意思是相當於已過字典。。。每開一道門就存門對應的鑰匙數據,退出時去字典找對應的門用的鑰匙
def run1(): print("grab the first part data") lock.acquire() global num num+=1 lock.release() return num def run2(): print("grab the second part data") lock.acquire() global num2 num2+=1 lock.release() return num2 def run3(): lock.acquire() res=run1() print("----between run1 and run2-----") res2=run2 lock.release() print(res,res2) num,num2=0,0 lock=threading.RLock() ##遞歸鎖創建 for i in range(10): t=threading.Thread(target=run3) t.start() while threading.active_count()!=1: print(threading.active_count()) else: print("------all threads done------") print(num,num2)
線程鎖,遞歸鎖