竞态 · Race Condition
英文:race condition(按单词直读)
后端与数据库难度:硬核 ★★★
🗣️一句话大白话
两个人同时读写同一份数据,先来后到没定好,结果取决于「谁快」——库存只剩 1 件,两个人同时下单,可能都成功,卖超了。
🎬真实场景
抢购场景:库存检查「还有 1 件」→ 扣库存。两个请求几乎同时检查,都看到 1,都扣——库存变 -1。解法:让检查和扣减变成原子操作,或加锁排队。
📮你可以这样说
「「下单扣库存要防竞态:用数据库原子操作(UPDATE stock = stock - 1 WHERE stock > 0)判断是否成功,不要先查再扣。」」
⚠️边界与常见误解
- ▸单用户测试永远测不出竞态,要「两个人同时点」才能复现
- ▸「先查再改」是竞态的典型形状——代码评审重点盯它
- ▸锁、原子操作、事务是三种解药,让 AI 说明用了哪种