死锁的底层原理是什么?怎么检测?怎么预防?有没有看过源码?