Python多线程——LOCK锁
生活随笔
收集整理的這篇文章主要介紹了
Python多线程——LOCK锁
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
'''
import threading
number=0
def addNumber():global numberfor i in range(1000000):number+=1# 運(yùn)行時(shí)分為計(jì)算賦值兩步:a=number+1,number=adef downNumber():global numberfor i in range(1000000):number-=1# 運(yùn)行時(shí)分為計(jì)算賦值兩步: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鎖,導(dǎo)致計(jì)算和賦值操作分開,最終輸出的number值為一個(gè)不確定的數(shù)
'''
# 解決方法是添加LOCK鎖——多線程同時(shí)爭(zhēng)奪統(tǒng)一資源時(shí)使用
# LOCK鎖一個(gè)進(jìn)程使用后必須釋放,否則其他進(jìn)程無(wú)法執(zhí)行會(huì)一直等待
import threading
lock=threading.Lock() # 創(chuàng)建一個(gè)鎖
number=0
def addNumber():global numberfor i in range(1000000):# 加鎖可以保證一次計(jì)算和賦值操作完成后再讓出資源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')
?
總結(jié)
以上是生活随笔為你收集整理的Python多线程——LOCK锁的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python里面的多线程
- 下一篇: Python多线程——递归锁RLOCK