定义:
死锁是进程竞争可重用资源导致的。系统是并发执行的,所以需要锁这个机制来防止一个进程在使用某个资源的过程中另一个进程修改这个资源。但是有可能会产生死锁。比如有进程P和进程Q,有200的内存,P先申请了80并上锁,Q也申请的70并上锁,此时P又想申请80,但是内存已不足,P进程就等待在这里,如果此时Q也想申请80,空间还是不足,Q进程也等待在这里,就形成了死锁。
产生死锁的必要条件有四个:
互斥使用(资源独占) 即资源每次只能给一个进程使用;占有且等待,即进程在申请新的资源的同时保持对原来资源的占有; 资源是不可抢占的; 几个进程之间形成了循环等待。
死锁的解决方案:
死锁预防:
设计合适的死锁分配算法,不让死锁发生。即防止死锁的四个必要条件的任何一个条件发生
死锁避免:
在系统运行过程中进行动态检查,若可能发生死锁,则不予分配资源。
死锁检测与解除:
允许死锁发生,但系统会不停监视死锁是否真的发生。一旦发生,以最小代价解除死锁。
活锁是进程一直在运行,但是一直得不到资源,处于一种忙等待的状态。一直在尝试,失败,尝试。既没有进展,也没有阻塞。
饥饿是由于资源分配策略的不合理导致某个进程一直得不到执行。