互斥鎖的使用步驟:
# 創(chuàng)建鎖
mutex = threading.Lock()
# 上鎖
mutex.acquire()
#這里編寫代碼保證同一時刻只能有一個線程去操作,對共享數(shù)據(jù)進行鎖定
# 排放鎖
mutex.release()
例子:
import threading
# 全局變量
g_num= 0
# 創(chuàng)建互斥鎖谍失,Lock本質(zhì)上是一個函數(shù)吮廉,通過調(diào)用函數(shù)創(chuàng)建一個互斥鎖
lock= threading.Lock()
def task1():
? ? # 上鎖
? ? lock.acquire()
? ? for iin range(10000):
? ? ? ? global g_num
g_num+= 1
? ? print("task1:", g_num)
? ? # 釋放鎖
? ? lock.release()
def task2():
? ? # 上鎖
? ? lock.acquire()
? ? for iin range(10000):
? ? ? ? global g_num
g_num+= 1
? ? print("task2:", g_num)
? ? # 釋放鎖
? ? lock.release()
def main():
? ? # target 指定這個線程去哪個函數(shù)執(zhí)行代碼
? ? # args 指定調(diào)用函數(shù)所傳遞的參數(shù)真慢,且 args 需為元組
? ? t1= threading.Thread(target=task1,)
? ? t2= threading.Thread(target=task2,)
? ? t1.start()
? ? # time.sleep(1)
? ? t2.start()
? ? # time.sleep(1)
? ? # 互斥鎖可以保證同一時刻只有一個線程去執(zhí)行代碼,能保證全局變量數(shù)據(jù)的正確
? ? # 線程等待和互斥鎖都是把多任務(wù)改成單任務(wù)去執(zhí)行,保證了數(shù)據(jù)的準(zhǔn)確性日熬,但執(zhí)行性能下降
if __name__== '__main__':
? ? main()