"""
線程鎖的意義,讓一個線程從頭到尾的執行
阻止了多線程的併發執行,包含鎖的某段代碼只能以單線程模式執行,效率降低
在需要的時候上鎖
"""
import threading
lock = threading.Lock()
num = 10
def run(n):
global num
for i in range(1000000):
''' try:
# 上鎖
lock.acquire()
num = num - n
num = num + n
finally:
# 釋放
lock.release()'''
with lock:
num = num - n
num = num + n
# 兩種方式效果相同,with lock 可以自動上鎖與解鎖
if __name__ == '__main__':
t1 = threading.Thread(target=run, args=(6,))
t2 = threading.Thread(target=run, args=(9,))
t1.start()
t2.start()
t1.join()
t2.join()
print('num', num)