死锁示例搞多线程的经常会遇到死锁的问题,学习操作系统的时候会讲到死锁相关的东西,我们用Python直观的演示一下。
死锁的一个原因是互斥锁。假设银行系统中,用户a试图转账100块给用户b,与此同时用户b试图转账200块给用户a,则可能产生死锁。
2个线程互相等待对方的锁,互相占用着资源不释放。
#coding=utf-8
importtimeimportthreadingclassAccount:def __init__(self, _id, balance, lock):
self.id=_id
self.balance=balance
self.lock=lockdefwithdraw(self, amount):
self.balance-=amountdefdeposit(self, amount):
self.balance+=amountdeftransfer(_from, to, amount):if _from.lock.acquire():#锁住自己的账户
_from.withdraw(amount)
time.sleep(1)#让交易时间变长,2个交易线程时间上重叠,有足够时间来产生死锁
print 'wait for lock...'
if to.lock.acquire():#锁住对方的账户
to.deposit(amount)
to.lock.release()
_from.lock.release()print 'finish...'a= Account('a',1000, threading.Lock())
b= Account('