python中的互斥锁
如果沒有控制多個(gè)線程對同一資源的訪問,對數(shù)據(jù)造成破壞,使得線程運(yùn)行的結(jié)果不可預(yù)期。這種現(xiàn)象稱為“線程不安全”。
?
線程同步解決問題:
?
from threading import Thread, Lock
?
num =0? # 資源競爭問題
mutex= Lock()? # 創(chuàng)建一個(gè)互斥鎖
def fun1():
??? global num
??? for i in range(1000000):
?????? ?mutex.acquire()
??????? # acquire 首先判斷鎖的當(dāng)前狀態(tài),如果鎖處于上鎖狀態(tài),則默認(rèn)處于阻塞等待,
??????? # 等待直到鎖變成未上鎖狀態(tài)的時(shí)候,才能繼續(xù)向下運(yùn)行
??????? # 如果一旦發(fā)現(xiàn)鎖處于未上鎖狀態(tài),則將鎖設(shè)置為上鎖
??????? num += 1
????? ??mutex.release()? # 釋放鎖,表示將鎖設(shè)置為打開狀態(tài)
?
def fun2():
??? global num
??? for i in range(1000000):
???? ???mutex.acquire()
??????? num += 1
?????? ?mutex.release()? # 釋放鎖,表示將鎖設(shè)置為打開狀態(tài)
?
?
t1 =Thread(target=fun1)? # 創(chuàng)建一個(gè)線程對象
t2 =Thread(target=fun2)? # 創(chuàng)建一個(gè)線程對象
?
t1.start()? # 開啟線程的執(zhí)行
t2.start()
?
t1.join()? # 回收線程資源
t2.join()
?
print(num)
?
總結(jié)
以上是生活随笔為你收集整理的python中的互斥锁的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MYSQL账户管理及主要操作
- 下一篇: python中的私有化