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