死锁概念:死锁是指两个或多个进程/线程在执行过程中因为互相等待对方所占用的资源而陷入无限等待的状态。当发生死锁时,进程/线程将无法继续执行下去,系统将会陷入无限等待的状态。
预防死锁:为了预防死锁,可以采取以下措施:
避免互斥:尽量减少对共享资源的竞争。例如,可以采用读写锁(read-write lock)而不是互斥锁(mutex)来管理共享资源。
避免占有和等待:进程在等待资源时不占用已经获得的资源,例如,在申请资源之前要先释放已经占有的资源。
避免不可抢占:不允许进程抢占已经被其他进程占有的资源。例如,可以引入优先级概念,只有更高优先级的进程才能抢占资源。
实现资源有序分配:按照某种顺序分配资源,从而避免循环等待。例如,可以规定所有进程在申请资源时都必须按照编号从小到大的顺序进行。
引入超时机制:如果进程等待时间过长,可以强制释放已经占有的资源。这可以避免进程陷入无限等待的状态。
引入死锁检测和恢复机制:在发现死锁时,可以通过撤销某些进程的资源占用或者强制终止某些进程的方式解除死锁。