"""
模拟死锁的产生过程
"""
from time import sleep
from threading import Thread,Lock
# 账户类
class Account:
def __init__(self,_id,balance,lock):
self.id = _id # 账户名
self.balance = balance # 存款
self.lock = lock # 锁
# 取钱
def withdraw(self,amount):
self.balance -= amount
# 存钱
def deposit(self,amount):
self.balance += amount
# 查看余额
def get_balance(self):
return self.balance
# 创建两个账户
Tom = Account('Tom',5000,Lock())
Alex = Account('Alex',8000,Lock())
def transfer(from_,to,amount):
"""
:param from_: 从该账户转钱
:param to: 给这个账户转入
:param amount: 转账金额
:return: None
"""
from_.lock.acquire() # from_上锁
from_.withdraw(amount) # from_减少
sleep(0.1)
from_.lock.release() # from_解锁
to.lock.acquire() # to上锁
to.deposit(amount) # to钱增加
to.lock.release() # to解锁
# from_.lock.release() # from_解锁
t1=Thread(target=transfer,args=(Tom,Alex,1500))
t2=Thread(target=transfer,args=(Alex,Tom,3000))
t1.start()
t2.start()
t1.join()
t2.join()
print("Tom:",Tom.get_balance())
print("Alex:",Alex.get_balance())
注:Tom和Alex通过两个线程互相转账,但是它们调的是同一个共有资源,当两个线程运行的时候,就会发生互相卡住,谁也无法调用资源的情况,也就是死锁。
本文通过两个账户间的转账操作,模拟并演示了死锁现象。使用Python的threading模块和Lock对象,创建了两个线程分别代表账户Tom和Alex进行相互转账。然而,由于资源竞争和锁定顺序的不同,导致了死锁情况的发生。
239

被折叠的 条评论
为什么被折叠?



