关于 principle-separate-before-serializing-shared-state
principle-separate-before-serializing-shared-state 是一项开发技能,用于防止并发参与者修改状态时发生竞态。它建议先消除不必要的共享写入目标,确有共享需要时再用结构化方式串行访问。
主要功能
- 01识别共享可变状态
- 02消除不必要的共享写入
- 03为参与者分配独立状态目标
- 04串行处理不可避免的共享访问
适用场景
- 01设计并发 Agent 工作流
- 02避免共享文件或分支中的竞态
- 03判断应隔离状态还是加锁
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ poteto/ plugins --skill principle-separate-before-serializing-shared-state安装后在 Claude Code 中输入/principle-separate-before-serializing-shared-state确认已加载。
详细介绍
在序列化共享状态前,先消除共享
当并发执行者可能共享可变状态时,首先要问:他们是否真的需要同一个可变对象?如果不需要,就消除共享。如果确实需要共享,就通过结构性方式强制串行化:锁文件、顺序阶段、独占所有权。指令和约定无法控制并发。
原因: 对共享状态进行并发写入会产生竞态条件,问题时有时无、难以复现,调试成本也很高。告诉 Agent 或 goroutine 要“轮流操作”行不通。
模式:
- 识别共享的可变状态(双方都会读写的文件、双方都会推送到的分支、双方都会定义和使用的 API)。
- 默认做法:消除共享写入目标。 要问:这些执行者需要同一个规范对象,还是在发布彼此独立的信息?为每个执行者分配各自拥有的文件、键、分支或状态目录,并仅在读取或报告时合并。在同一个
state.json中由两个工作线程分别写入自己的lastX字段,仍然属于共享变更;而使用indexer-state.json和metrics-state.json则不属于。 - 只有当同一个共享写入目标确实是不可违背的约束时,才通过结构性方式串行化访问(锁文件、顺序阶段、单写入者执行者或原子比较并交换)。把“我们需要一把锁”视为需要审视的设计异味,而不是默认答案。
评论
支持 Markdown