问题
问答题
某银行计算机系统要实现一个电子转账系统,基本的业务流程是首先对转出方和转入方的账户进行加锁,然后进行转账业务,最后对转出方和转入方的账户进行解锁。如果不采取任何措施,系统会不会发生死锁为什么如果会发生死锁,请设计一种能够避免死锁的解决方案。
答案
参考答案:会发生死锁。例如两个账号A和B,有两个转账业务,分别是从A转入B和从B转入A。这两个业务在执行时可能会发生:一个业务锁定A账户,试图锁定B账户失败而等待;另一个业务锁定B账户,试图锁定A账户也失败,也在等待。
系统处于死锁状态。
为避免死锁,应采用两阶段加锁方案:每个账户设定一个唯一的账号,在业务执行前,必须按照账号大小依次获得所有账户的锁,业务完成后按照加锁次序,将后锁定的账户先解锁。