两位写作者,一棵工作树:人机协同编辑的并发控制
你正在重命名一个函数到一半,文件就在光标下重新加载了。你正在暂存的 diff 不再与工作树匹配。你的开发服务器无故热重载了两次,而十分钟前还通过的测试,现在却在你从未打开过的一个文件中报错了。没有崩溃,没有警告。你和你的编程 Agent 刚才一直在同时编辑同一个工作树,而你发现这一点的方式和大多数团队一样:通过那些莫名其妙的 diff。
数据库在五十年前就解决了这个问题,并给它起了一个名字 —— 并发控制 (concurrency control)。两个操作共享可变状态的写入者要么需要一个锁,一个隔离边界,要么需要一个合并协议,而在这些选项中做出选择是一个具有已知权衡的设计决策。然而,大多数采用编程 Agent 的工程团队从未明确做出这个决定。他们将第二个写入者直接扔进一个单一的工作树中,保留着单写入者世界的习惯,然后将产生的怪象归类为 “AI 不稳定”。这不是不稳定,这是一个竞态条件 (race condition),而你正是参赛者之一。
