避免死锁的一招: 按同样的顺序加锁

当进程A正在把钱从甲账户转到乙账户时,进程B也正在把钱从乙账户到甲账户;转账时需要锁住账户,如果A锁住甲等待乙时,B已锁住乙并等待甲,那么双方就会陷入死锁。

要避免这种死锁,有一个办法是: 按同样的顺序加锁。 注意,读书不要读得太快。 听说“按同样顺序加锁”就能避免死锁,就总是先锁出账者,再锁入账者。。。 结果,还是死锁。

“按同样的顺序加锁”不是指“两个进程使用同样的操作顺序(比如先锁出账者,再锁入账者)”,而是要“对给定的两个资源,所有进程总是先锁资源1,再锁资源2”。

比如,在数据库中,可以总是先锁ID更大的那条记录;在JAVA代码中,可以总是先锁hashcode更大的那条记录。

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.