import threading
from threading import lock,rlock#可重入的鎖
# 全域性直譯器鎖 gil
# 非常影響效能,死鎖(lock不能同時兩個acquire),呼叫使用鎖的其他函式
# rlock 在乙個執行緒中,可以連續多次呼叫acquire,但注意release次數要匹配
## lock = lock()
lock = rlock() # 實際開發中使用次數多
total = 0
# def add():
# global total
# with lock: # 方法1
# for i in range(10000000):
# total +=1
def add():
global total
global lock
for i in range(10000000):
lock.acquire()
lock.acquire()
total +=1
lock.release()
lock.release()
def desc():
global total
global lock
for i in range(10000000):
lock.acquire()
total -= 1
lock.release()
thread1 = threading.thread(target=add)
thread2 = threading.thread(target=desc)
thread1.start()
thread2.start()
thread1.join()
thread2.join()
print(total)
# 167499
# 1518478
執行緒回顧 多執行緒爬蟲
import threading def run a 當前執行緒 c threading.current thread print 子執行緒開始 c.name 建立乙個執行緒 t threading.thread target run,args 1,name haha 啟動執行緒 t.start 關...
多執行緒同步
synchronized 物件 其中物件相當於乙個標誌 鎖 用於判斷 同步 塊 同步的前提必須是兩個或兩個以上的執行緒,且共用同乙個鎖 同步解決了多執行緒的安全問題 弊端 多執行緒需要判斷鎖,消耗了資源 同步函式 將synchronized放在函式名前面即可 即具有同步性質 使用的鎖是this 靜態...
多執行緒同步
同步 即限制某個資源在同一時間只能被同乙個執行緒訪問。執行緒安全問題 多個執行緒共同處理共享資源所導致的。解決 多執行緒處理乙個共享資源時,將處理共享資源的 利用關鍵字synchronized修飾。同步 塊 synchronized修飾 塊,synchronized lock 同步方法 synchr...