V3.03.2Stale locks设计

遗忘释放的锁会阻塞他人

别名: 悬挂锁 · 忘记解锁 · 锁泄漏

概念解释

锁最常见的问题不是被人恶意占用,而是被遗忘:持锁人编辑完就走了、去开会了、关掉浏览器去吃午饭了,锁还挂在那里。此后所有想碰这块区域的人都被告知「已被占用」,而占用者本人对此一无所知。这种悬挂锁(stale lock)是锁定机制的标志性故障——它把排他性从「正在编辑」错位成「曾经编辑过」,系统的保护逻辑反而成了阻塞源。判定特征:锁的存在与持锁人的实际活动已无关联。

机制

锁的生命周期依赖持锁人的显式收尾动作(点完成、关闭、退出),而人的注意力恰恰在编辑结束时最涣散——工作已完成,心智已经移到下一件事,收尾动作是最容易被跳过的一步。锁的占用又与持锁人的后续状态完全脱钩:他离线、切窗、合上电脑,锁都不自知。两件事叠加,锁的存续时间系统性长于真实占用时间。阻塞的代价由等待者单方面承担,且往往伴随错误的归因——等待者以为是对方还在改,不好意思催促,反复刷新等待,实际上没有任何工作正在进行。多个区域被不同的遗忘锁挂住时,整个共享空间的可用面积以肉眼可见的速度萎缩。

边界

不是所有长时间持有的锁都是遗忘锁:有人确实在长时间打磨一个区域,此时长持锁是合理的。区分靠持锁人的活动信号(最近是否仍在编辑该区域),而不是单纯的时长。另外,遗忘锁的严重性与组织情境相关——熟人小团队里一条消息就能解决,大组织或跨时区团队里找到持锁人本身就要一天,此时悬挂锁的代价被时差放大。

怎么落地

  • 把锁的释放从「显式动作」改为「默认自动」:检测到持锁人一段时间无活动即提示其确认释放,无响应则自动释放并通知。
  • 锁界面上始终显示持锁人身份与最近活动时间,让等待者能区分「正在打磨」与「人已不在」。
  • 给等待者一个不冒犯的催促通道(一键提醒)与一个越级的备选(申请强制释放),两条路都留记录。
  • 验证:统计锁的平均持有时长与持锁人最后活动的间隔——两者差值(悬挂时长)占持有时长的比例,就是遗忘锁的规模;目标是把这个比例压到接近零。

延伸

  • 同组V3.03.1 锁定避免冲突但阻断并行 · V3.03.3 锁需要超时与强制释放
  • 相邻V3.05 控制权与发言权
  • 站内检索stale lock · lock leakage · orphaned lock · collaborative locking

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/V3.03.2