**无等待(wait-free)**是并发算法最强的进度保证:每个线程都能在有限步数内完成自己的操作,无论其他线程的速度、暂停甚至崩溃如何。它比"无锁(lock-free)"更强——无锁只保证"系统整体"总有线程在进展,个别线程可能一直 CAS 失败被饿死(饥饿);无等待则对每个线程都有步数上界,彻底排除饥饿。
进展保证的层级(从弱到强):
- 阻塞(blocking):用互斥锁,持锁线程被换出会拖累所有等待者。
- 无锁(lock-free):至少一个线程能推进(典型:CAS 循环)。
- 无等待(wait-free):所有线程都能在有限步内完成。
实现思路与代价:经典做法是把操作变成单步生效(如一次 CAS 发布结果),或让快的线程"帮助"慢的线程完成其未竟操作(helping 机制),例如无等待队列、无等待哈希表。理论上任何对象都能构造无等待实现(Herlihy 的通用构造),但实践代价高:额外的内存分配、日志/帮助开销常使其慢于简单的 lock-free 版本,所以工程中 lock-free 更常见,wait-free 主要用于硬实时等对尾延迟敏感的场景。
追问方向:obstruction-free(最弱的无阻塞层级)、无锁数据结构中的内存回收难题(ABA、hazard pointer、epoch 回收)。