python 執行緒死鎖示例

2021-10-01 08:43:02 字數 1685 閱讀 4409

銀行轉賬:兩個賬戶同時給對方轉賬,模擬線程死鎖

from threading import thread,lock

from time import sleep

#賬戶類

class

account

:def

__init__

(self,_id,balance,lock)

:#每個賬戶自帶乙個鎖,只要數字balance要變動,就要提前上鎖

self.

id= _id

self.balance = balance

self.lock = lock

#取錢defwithdraw

(self,amount)

: self.balance -= amount

#存錢defdeposit

(self,amount)

: self.balance += amount

#檢視餘額

defget_balance

(self)

:return self.balance

#生成兩個賬戶

tom = account(

'tom'

,12000

,lock())

#lock()直接建立了乙個鎖

abby = account(

'abby'

,9000

,lock())

#轉賬函式,轉賬基本原則:誰的賬戶要動,需要先上鎖

#from_引數為要轉出賬戶,to引數為轉入賬戶

deftransfer

(from_,to,amount)

:#from_賬戶上鎖

if from_.lcok.acquire():

from_.withdraw(amount)

#from_賬戶減少

#to賬戶要動了,也要上鎖

if to.lock.acquire():

to.deposit(amount)

#to 加錢

to.lock.release(

)#加錢完畢,解鎖

#from_賬戶也轉賬完畢,解鎖

from_.lock.release(

)print

('%s給%s轉了%d元'

%(from_._id,to._id,amount)

#生成兩個執行緒,同時轉賬

t1 = thread(target=transfer,args=

(tom,abby,

4000))

#tom給abby轉4000

t2 = thread(target=transfer,args=

(abby,tom,

1500))

#abby給tom轉2500

#流程:兩個執行緒同時執行,執行緒t1給tom上鎖,執行緒t2給abby上鎖,兩個執行緒都向下走,準備給對方上鎖,發現對方已經鎖上了,資源互不釋放,造成死鎖

t1.start(

)t2.start(

)t1.join(

)t2.join(

)print

('tom:'

,tom.get_balance())

print

('abby:'

,abby.get_balance(

))

Python 多執行緒死鎖的示例

在 python 中多執行緒中為了防止資源競爭而出現問題,提供了鎖的機制,當乙個執行緒操作資源時進行加鎖,操作完畢後釋放鎖,這樣其他執行緒就不會同時操作資源匯出出現異常。在 python 多執行緒中注意是兩種鎖 互斥鎖和遞迴鎖 那麼它們有什麼區別呢?互斥鎖 一旦乙個執行緒獲得乙個互斥鎖,會阻塞隨後嘗...

python 死鎖 死鎖的示例 with

死鎖 死鎖就是一直等待對方釋放鎖的情景 死鎖的結果會造成程式的停止響應,不能再處理其他的任務了 需求 根據下標在列表中取值,保證同一時刻只能有乙個執行緒去取值 import threading import time 建立互斥鎖 lock threading.lock 根據下標去取值,保證同一時刻只...

python死鎖案例 Python執行緒 死鎖

死鎖產生的4個必要條件 1 互斥 乙個資源同一時刻只允許乙個執行緒進行訪問。2 占有未釋放 乙個執行緒占有資源,且沒有釋放資源。3 不可搶占 乙個已經占有資源的執行緒無法搶占到其他執行緒擁有的資源。4 迴圈等待 兩個或者兩個以上的執行緒,本身擁有資源,不釋放資源,並且同時嘗試獲得其他執行緒所持有的資...