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 當前...