5.1.15 線程的互斥鎖
阿新 • • 發佈:2018-06-16
n) splay threading 內存 PE tar TE play ID
from threading import Thread, Lock import time n = 100 def task(): global n # mutex.acquire() temp = n time.sleep(0.1) n = temp - 1 # mutex.release() if __name__ == ‘__main__‘: # mutex = Lock() t_l = [] for i in range(100): t = Thread(target=task) t_l.append(t) t.start()for t in t_l: t.join() print(‘主‘, n)
運行結果:
主 99View Code
加了互斥鎖:
# mutex from threading import Thread, Lock import time n = 100 def task(): global n mutex.acquire() temp = n time.sleep(0.1) n = temp - 1 mutex.release() if __name__ == ‘__main__‘: mutex= Lock() # 與子進程的區別是:子線程共享進程內的內存空間,所以無需把鎖傳給線程。進程內的所有線程用的就是同一把鎖。
# 開進程的話,進程與子進程之間的數據是獨占的,所以各子進程之間的數據都是獨立的,鎖也就不是同一把鎖。故需要把鎖傳給子進程,確保各子進程用的是同一把鎖。 t_l = [] for i in range(100): t = Thread(target=task) t_l.append(t) t.start() for t in t_l: t.join()print(‘主‘, n)
運行結果:
主 0View Code
互斥鎖的作用:將並行變成串行。
5.1.15 線程的互斥鎖