Python多线程——LOCK锁
生活随笔
收集整理的這篇文章主要介紹了
Python多线程——LOCK锁
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
'''
import threading
number=0
def addNumber():global numberfor i in range(1000000):number+=1# 運行時分為計算賦值兩步:a=number+1,number=adef downNumber():global numberfor i in range(1000000):number-=1# 運行時分為計算賦值兩步:b=number-1,number=bif __name__ == '__main__':print('start')t=threading.Thread(target=addNumber)t2=threading.Thread(target=downNumber)t.start()t2.start()t.join()t2.join()print(number)print('stop')
# 由于CPython的GIL鎖,導致計算和賦值操作分開,最終輸出的number值為一個不確定的數
'''
# 解決方法是添加LOCK鎖——多線程同時爭奪統一資源時使用
# LOCK鎖一個進程使用后必須釋放,否則其他進程無法執行會一直等待
import threading
lock=threading.Lock() # 創建一個鎖
number=0
def addNumber():global numberfor i in range(1000000):# 加鎖可以保證一次計算和賦值操作完成后再讓出資源lock.acquire() # 上鎖number+=1lock.release() # 釋放鎖def downNumber():global numberfor i in range(1000000):lock.acquire()number-=1lock.release()if __name__ == '__main__':print('start')t=threading.Thread(target=addNumber)t2=threading.Thread(target=downNumber)t.start()t2.start()t.join()t2.join()print(number)print('stop')
?
總結
以上是生活随笔為你收集整理的Python多线程——LOCK锁的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python里面的多线程
- 下一篇: Python多线程——递归锁RLOCK