1
我們在多線程Python環境中工作,需要一段代碼就像一個互斥:Python的二進制信號VS鎖
lock = threading.Lock()
with lock:
# get data from shared storage
# process
# put back to shared storage
目前,它在我看來,二進制信號threading.Semaphore()
並鎖定threading.Lock()
將同樣爲此服務。如果我從鎖定狀態切換到二進制信號狀態,或者從鎖定狀態切換到二進制信號狀態,是否有一些陷阱或獲得?
注:代碼運行內部greenthreads(如果改變的情況)
謝謝!順便說一句鎖也有lock.acquire(blocking = False)選項 –
你在開玩笑嗎?你只是解釋說他們是不一樣的,然後你得出結論,他們看起來是一樣的......他們是毫不相同的。雖然信號量可以被線程1鎖定並被線程2解鎖,但鎖只能被同一線程的__only__鎖定和解鎖!只有增量和減量操作通過鎖定和解鎖操作進行同步。並且只有inc/dec操作中的鎖定操作由同一個線程完成。 – Roberto