定义
活锁(Livelock)是指两个或多个进程(或线程)在执行过程中,虽然没有被阻塞,但因为不断地响应对方的状态变化而改变自己的状态,导致陷入无限循环,始终无法完成实际工作的并发问题。
核心直觉
就像两个人在狭窄的走廊里迎面相遇。为了给对方让路,A 向左侧身,B 也同时向右侧身(到了同一侧);发现还是堵着,A 赶紧向右侧身,B 也同时向左侧身。两人一直在不停地“动”(消耗体力),但谁也过不去。这与死锁(两人互不相让,死死站着不动)形成了鲜明对比。
关键点
- 与死锁的区别:死锁中的进程是阻塞/睡眠状态,不消耗 CPU;活锁中的进程是活跃/运行状态,会疯狂消耗 CPU 资源却不做无用功。
- 常见原因:通常是因为过度礼让(如检测到冲突就主动释放已占有的资源并重试),且重试的步调过于一致。
- 解决思路:引入随机性(如以太网 CSMA/CD 协议中的随机退避时间),让各个进程重试的等待时间错开,打破同步的循环。