死锁就是所有两个或多个线程都在请求被对方占用的资源,而陷入的一种僵局。
产生死锁的四个必要条件:
1.互斥条件(在某一个时刻,某一个资源仅能被一个线程占有)
2.请求和保持条件(某一进程占据部分资源不释放,同时请求其他资源)
3.不可剥夺条件(被占据的资源被释放前,不能被其他线程获取)
4.循环等待条件(两个或多个线程都在等待对方占据的资源)
预防死锁的方法
1.资源一次性分配(破坏了请求和保持条件)
2.当一个资源得不到的时候,释放占用的资源(破坏不可剥夺条件)
3.为资源编号,按编号从低到高申请资源(破坏循环等待条件)
避免死锁的方法
银行家算法