死锁、活锁、饥饿、自旋锁
💡
原文中文,约8400字,阅读约需20分钟。
📝
内容提要
死锁是指两个或多个进程因互相持有对方所需的资源而处于等待状态,导致程序停止运行。死锁处理方法包括被动策略和主动策略。活锁是指线程无法取得需要的资源而一直重试,可以通过引入随机性和系统时间戳来避免。饥饿是指进程因无法获取所需资源而无法执行,可以通过公平调度、优先级反转和限制等待时间来处理。自旋锁是一种减少线程切换开销的互斥锁实现方式。
🎯
关键要点
- 死锁是指多个进程因互相持有对方所需资源而处于等待状态,导致程序停止运行。
- 死锁发生的四个必要条件包括互斥、占有等待、不可抢占和循环等待。
- 处理死锁的方法分为被动策略和主动策略,鸵鸟策略是一种被动策略。
- 主动策略包括预防死锁的四种方法:破坏互斥条件、破坏占有等待、破坏不可抢占和破坏循环等待。
- 避免死锁可以通过将操作转换为安全的序列化操作来判断是否存在死锁。
- 银行家算法用于判断贷款请求是否会导致不安全状态,从而避免死锁。
- 检测死锁的方法包括周期性扫描资源分配情况,检测有向环路。
- 解除死锁的方法包括杀死进程、抢占资源和回滚。
- 活锁是指线程无法取得所需资源而一直重试,导致程序无法正常执行。
- 处理活锁的方法包括引入随机性和系统时间戳。
- 自旋锁是一种互斥锁实现方式,通过不断尝试获取锁来减少线程切换开销。
- 饥饿是指进程因无法获取所需资源而无法执行,处理方法包括公平调度、优先级反转和限制等待时间。
➡️