Archives

All posts for the month March, 2015

死锁问题

最经典的死锁场景就是哲学家进餐。

银行汇款也是一个典型的场景。A汇款给B,同时B也在汇款给A, 这时有可能会发生死锁。

因为A给B汇款在执行lock A;lock B;B给A汇款在执行lock B;lock A;

那么通常的解决方案有哪些呢?

最简单的方法是在lock from;lock to之前再请求一个公共的lock,但是每个线程/进程都这么做效率比较低。

另一种办法是都执行lock A; lock B这样的顺序,这可以通过比较对象的某种属性来进行;

数据库管理系统则通常提供了死锁的检测机制,在检测到发生死锁之后,对其中一部分采取回滚,恢复。