Python(執行緒鎖)

2021-09-10 02:49:48 字數 1933 閱讀 5475

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不適用 終止執行緒 需要自己構...