1. 程式人生 > >多線程 -- 同步鎖

多線程 -- 同步鎖

release brush wid 共享變量 height rt thread width 圖片 target

  • 多個線程同時操作一個變量
import time
import threading

def addNum():
    #在每個線程中都獲取這個全局變量
    global num

    temp = num
    time.sleep(0.1)
    #對此公共變量進行-1操作
    num = temp-1

#設定一個共享變量
num = 100
thread_list = []
for i in range(100):
    t = threading.Thread(target=addNum)
    t.start()
    thread_list.append(t)

#等待所有線程執行完畢
for t in thread_list:
    t.join()

print(‘final num:‘, num )

輸出:
99

技術分享圖片

  • 同步鎖,acquire和release之間的代碼,在同一時間只會被一個線程執行
import time
import threading

def addNum():
    global num

    lock.acquire()
    temp = num
    time.sleep(0.1)
    num = temp-1
    lock.release()

num = 100
thread_list = []
lock = threading.Lock()

for i in range(100):
    t = threading.Thread(target=addNum)
    t.start()
    thread_list.append(t)

for t in thread_list:
    t.join()

print(‘final num:‘, num )

輸出:
0

多線程 -- 同步鎖