python 互斥鎖的概念和使用

2021-09-25 15:09:01 字數 1116 閱讀 7195

1.1 資源競爭產生原因:

​ 1 多執行緒共享全域性資源

​ 2 多個執行緒不加限制隨意訪問全域性資源 產生競爭 導致資料錯誤

1.2 互斥鎖使用

​ 加互斥鎖(保證任意時刻只有乙個執行緒能夠占有鎖)

​ 1 訪問資源先加鎖 (已被占用則等待直到別人釋放) ;2 使用 ;3 完成釋放鎖

import threading

g_number =

0def

update_number

(lock)

:"""讓子程序執行"""

global g_number

for i in

range

(10000000):

# 嘗試加鎖  如果沒有人鎖定 成功;如果有人 等待

lock.acquire(

) g_number +=

1# 釋放鎖

lock.release(

)if __name__ ==

'__main__'

:# 在門上安裝一把互斥所

lock = threading.lock(

)# 1 建立乙個子執行緒 執行 update_number

thd1 = threading.thread(target=update_number, args=

(lock,))

thd1.start(

) thd2 = threading.thread(target=update_number, args=

(lock,))

thd2.start(

)# 2 建立乙個全域性變數

# 3 讓子執行緒修改全域性變數 

# 4 讓主線程等待子執行緒退出 列印全域性變數的值 

# 如果這個值和子執行緒設定的值 說明執行緒間共享全域性資源 ; 否則不共享

thd1.join(

) thd2.join(

)print

("得到最終值為%s"

% g_number)

1.3 互斥鎖優缺點

優點:​ 能夠解決資源競爭問題

缺點:​ 執行效率低(多執行緒模式變成 one-by-one 序列)

互斥鎖的概念和使用方法。

在單執行緒條件下,由於對資料操作,在同樣的時間下,只有乙個執行緒來操作。所以不用擔心資料的同步問題。現代的作業系統,大都提供併發機制,雖然有時候是表面的併發。在linux中,併發用的最多的是基於執行緒的併發,程序的代價太高了,這樣,乙個共享的資料,在同一時間內,可能有多個執行緒在操作。如果沒有同步機...

python互斥鎖和死鎖

同步就是協同步調,按預定的先後次序進行執行。如 你說完,我再說。同 字從字面上容易理解為一起動作 其實不是,同 字應是指協同 協助 互相配合。如程序 執行緒同步,可理解為程序或執行緒a和b一塊配合,a執行到一定程度時要依靠b的某個結果,於是停下來,示意b執行 b執行,再將結果給a a再繼續操作。解決...

程序鎖(互斥鎖)(Python)

3 搶票示例 import json import time from multiprocessing import process,lock defsearch i with open ticket encoding utf 8 as f ticket json.load f print s 當前...