Python Lock 死锁问题

本文通过实例分析了Python中死锁的发生条件,并展示了如何通过调整代码避免死锁。在1.2.1部分,一个简单的银行转账模拟演示了死锁的产生,当从_和to线程独立进行解锁和上锁操作时会出现死锁。而在1.2.2节,给出了正确的代码实现,避免了死锁,使得转账操作成功完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1死锁发生的必要条件
在这里插入图片描述
在这里插入图片描述1.2.1死锁例子 简单模拟银行转账

"""
    银行转账
"""

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):
    if from_.lock.acquire():    # 锁住自己的账户
        from_.withdraw(amount)
        sleep(0.5)
        if to.lock.acquire():   #
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值