18-小心死锁
小心死锁
对开发者来说,死锁是个非常值得重视的问题。当一个永远解不开的锁阻塞了多个线程时,死锁就发生了。举个例子来说,线程A获得了锁X的控制权而与此同时线程B也获得了锁Y的控制权,此时线程A希望获得锁Y的控制权而线程B同样也想获得锁X的控制权,这时这两个线程都将永久地等待对方的锁释放而不会释放自己已经拥有锁。两个线程获得锁顺序的相反导致了这一困境的形成。建议阅读第11章来了解如何合理地设计一个没有死锁的并发程序。
对开发者来说,死锁是个非常值得重视的问题。当一个永远解不开的锁阻塞了多个线程时,死锁就发生了。举个例子来说,线程A获得了锁X的控制权而与此同时线程B也获得了锁Y的控制权,此时线程A希望获得锁Y的控制权而线程B同样也想获得锁X的控制权,这时这两个线程都将永久地等待对方的锁释放而不会释放自己已经拥有锁。两个线程获得锁顺序的相反导致了这一困境的形成。建议阅读第11章来了解如何合理地设计一个没有死锁的并发程序。