【線程 03】線程鎖:解決線程間數據混亂的問題

"""
線程鎖的意義,讓一個線程從頭到尾的執行
阻止了多線程的併發執行,包含鎖的某段代碼只能以單線程模式執行,效率降低

在需要的時候上鎖

"""

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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章