Skip to content

无锁进展

Lock-free progress · Lock-freedom

系统整体保证在有限步内有某个操作完成,而不保证指定线程。

形式陈述

并发对象实现称为 lock-free,若在任意含未完成调用、且对象操作步骤持续发生的无限执行中,都有无穷多个方法调用完成。常见的局部表述是:只要当前存在 pending 操作且系统继续执行对象步骤,从执行的任意时刻起,经过有限多个系统步骤总有某个 pending 操作完成。它是系统整体进展保证,而不是指定操作的等待上界。

直觉

无锁意味着某个线程反复失败,通常是因为另一个线程成功改变了共享状态,所以系统仍在前进。它排除“所有活跃线程永久互相等待”,却允许个别线程长期饿死。

例子与边界

CAS 循环中,一个线程可能每次比较交换前都被其他线程抢先修改而无限重试;只要那些修改对应操作不断完成,算法仍可 lock-free。wait-free 更强,要求每个操作在自身有限步内完成;obstruction-free 更弱,只保证线程独占运行足够久时完成。

推论与应用

lock-free 是非阻塞数据结构的常见进展层级,能避免持锁线程暂停或崩溃导致全局停顿。它不等于代码中没有锁字样,也不自动保证公平、实时期限、低延迟或免于内存回收问题。

参考资料
  • Maurice Herlihy and Nir Shavit, The Art of Multiprocessor Programming, rev. 1st ed., Morgan Kaufmann, 2012,Ch. 3。
  • Hagit Attiya and Jennifer Welch, Distributed Computing: Fundamentals, Simulations, and Advanced Topics, 2nd ed., Wiley, 2004,Chs. 3–4。