Python 互斥鎖


  • 互斥鎖Mutex的使用
多個線程處理共享數據,數據會出現問題:
  2.7之前每100指令切換一次GIL鎖,線程就會sleep,線程 會把前100條 處理指令存放在CPU緩存內,切換GIL鎖后放入另 外一個線程再次處理同一 條共享數據,如果我這條共享數據需要 101條指令才能處理完,那么這塊數 據結果就會出現問題,當所 有執行線程輪一邊后在回來,CPU會取出第一 緩存區的數據, 執行第一條數據的101條指令,結果會覆蓋掉共享數據, 所以的 出的結果並不是我們想得到的。
 
決上述問題,我們就要使用“互斥鎖”:
  互斥鎖:保證鎖定同一個線程,修改這個完整的數據,是用戶 程序自己 的鎖。
  使用情況:因為使用時暫用時間,影響其他線程等待,所以盡量 修改處 理塊的數據后立即釋放鎖。
 
互斥鎖模擬
import threading,time
def run(n):
    # 獲取一把鎖
    lock.acquire()
 
# 設置全局變量
    global num
    num += 1

    # 釋放一把鎖
    lock.release()

# 互斥鎖實例化
lock = threading.Lock()
num = 0

# 循環50次
for i in range(50):

    # 生成一個線程實例target=目標,args=參數
    t = threading.Thread(target=run,args=("t-%s"%i,))

# 啟動線程 調用run
t.start()

# 執行結果添加到列表
t_objs.append(t)

print("num",num)
注意:只能在python2版本生效,python3,自動加鎖,Ubuntu內可以測試成功。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM