1. 什么是死锁?
如果在一个进程集合中,每个进程都在等待只能由该集合中的其他进程才能引发的事件,而无限期陷入僵持的局面成为死锁。
即一组进程中,如果每个进程都获得了部分资源,还想要得到其他进程所占用的资源,最终所有的进程都将陷入死锁。
2. 产生死锁的4个必要条件
- 互斥条件:进程互斥使用资源
- 占有和等待条件(部分分配条件):申请新资源得不到满足而等待时,不释放已占有资源。
- 不剥夺条件:一个进程不能抢夺其他进程占有的资源。
- 循环等待条件(环路条件):存在一组进程循环等待资源的现象。
死锁的避免:只要破坏以上四个条件之一就可以了。
3. 进程和线程的区别是什么?
- 进程是执行着的应用程序
- 线程是进程内部的一个执行序列
- 一个进程可以有多个线程
- 线程又叫轻量级进程
4. 如何确保N个线程可以访问N个资源同时又不导致死锁?
使用多线程,简单的避免死锁的方法是:指定获取锁的顺序,并强制线程按照指定的顺序获取锁。因此,如果所有的线程都是以同样的顺序加锁和释放锁,就不会出现死锁了。