簡體   English   中英

Python:用於交錯鎖獲取的慣用語

[英]Python: Idiom for interleaved lock acquisition

假設我需要執行以下操作:

global_lock.acquire()
local_lock = threading.Lock()
local_lock.acquire()
register_local_lock(local_lock, some_associated_data)
global_lock.release()
do_some_work()
local_lock.release()

問:使用with語句如何實現同一目的?

PS在我的應用程序中,實際上存在一種將兩個鎖獲取分開的解決方法。 但是,我認為在某些情況下,兩個鎖的獲取必須保持交錯,因此我仍在發布,還有一個附加問題:

問:能否通過重構消除所有交錯的鎖獲取?

問題2:是的,所有交織都可以消除。 請參閱有關操作系統的任何文本。 這可以追溯到Per Brink Hansen的開創性工作和“銀行家的問題”。 如果您以任何方式對交錯式鎖獲取進行了錯誤處理,都可能使系統死鎖。

在這種情況下,在我看來,global_lock提供的唯一保護是您訪問threading.lock的句柄。 這真的有必要嗎? 請注意,local_lock保護其余的關鍵區域。

問題1:請參閱Python條件式“具有”鎖設計

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM