在有些状况下死锁是能够避免的。下面将展现三种用于避免死锁的技术:线程
[加锁顺序]3d
博为峰小博老师:code
当多个线程须要相同的一些锁,可是按照不一样的顺序加锁,死锁就很容易发生。blog
若是能确保全部的线程都是按照相同的顺序得到锁,那么死锁就不会发生。看下面这个例子:排序
若是一个线程(好比线程3)须要一些锁,那么它必须按照肯定的顺序获取锁。它只有得到了从顺序上排在前面的锁以后,才能获取后面的锁。get
例如,线程2和线程3只有在获取了锁A以后才能尝试获取锁C(获取锁A是获取锁C的必要条件)。由于线程1已经拥有了锁A,因此线程2和3须要一直等到锁A被释放。而后在它们尝试对B或C加锁以前,必须成功地对A加了锁。im
按照顺序加锁是一种有效的死锁预防机制。可是,这种方式须要你事先知道全部可能会用到的锁(并对这些锁作适当的排序),但总有些时候是没法预知的。技术