1.1 多個執行緒對同乙個資料進行修改時,可能會出現不可預料的情況.
2.1 例項化物件方式實現執行緒鎖:
import threading
# 銀行存錢和取錢
def add(lock):
global money # 宣告money為全域性變數
for i in range(1000000):
# 2. 操作變數之前進行加鎖
lock.acquire()
money += 1 # money; money+1; money=money+1;
# 3. 操作變數之後進行解鎖
lock.release()
def reduce(lock):
global money
for i in range(1000000):
# 2. 操作變數之前進行加鎖
lock.acquire()
money -= 1
# 3. 操作變數之後進行解鎖
lock.release()
if __name__ == '__main__':
money = 0
# 1. 例項化乙個鎖物件;
lock = threading.lock()
t1 = threading.thread(target=add, args=(lock,))
t2 = threading.thread(target=reduce, args=(lock,))
t1.start()
t2.start()
t1.join()
t2.join()
print("當前金額:", money)
2.2 繼承方式實現執行緒鎖:
import threading
class addthread(threading.thread):
def __init__(self, lock):
super(addthread, self).__init__()
self.lock = lock
def run(self):
for i in range(1000000):
# 2. 操作變數之前進行加鎖
self.lock.acquire()
global money
money += 1 # money; money+1; money=money+1;
# 3. 操作變數之後進行解鎖
self.lock.release()
class reducethread(threading.thread):
def __init__(self, lock):
super(reducethread, self).__init__()
self.lock = lock
def run(self):
global money
for i in range(1000000):
# 2. 操作變數之前進行加鎖
lock.acquire()
money -= 1
# 3. 操作變數之後進行解鎖
lock.release()
if __name__ == '__main__':
money = 0
# 1. 例項化乙個鎖物件;
lock = threading.lock()
t1 = addthread(lock)
t2 = reducethread(lock)
t1.start()
t2.start()
t1.join()
t2.join()
print("當前金額:", money)
python 執行緒鎖
由於執行緒之間隨機排程 某執行緒可能在執行n條後,cpu接著執行其他執行緒。為了多個執行緒同時操作乙個記憶體中的資源時不產生混亂,我們使用鎖。lock 指令鎖 是可用的最低階的同步指令。lock處於鎖定狀態時,不被特定的執行緒擁有。lock包含兩種狀態 鎖定和非鎖定,以及兩個基本的方法。可以認為lo...
python執行緒互斥鎖 Python多執行緒與互斥鎖
多執行緒 threading python的thread模組是 較底層的模組,python的threading 模組是對thread做了 些包裝的,可以更加 便的被使 1.使 threading模組 from threading import thread 匯入模組 t thread target ...
python 多執行緒 鎖
參考 python cookbook 12章 啟動和停止執行緒 start 啟動執行緒 is alive 判斷是否已經結束 join 請求連線某個執行緒,等待該執行緒結束,才退出join函式 daemon引數,守護執行緒,該執行緒無法被連線,主線程結束後自動銷毀。2.7不適用 終止執行緒 需要自己構...