跳到正文

锁、原子操作与内存模型 ​

  • 状态:未准备
  • 适用方向:Go 全栈 / Go 后端
  • 最近复习:待填写
  • 下次复习:待安排

一句话回答 ​

锁保护共享状态及业务不变量,原子操作适合简单独立状态;同步关系决定写入何时可见,睡眠和启动顺序不提供同步保证。

原理解释 ​

数据竞争是无同步地并发访问同一内存且至少一个写入。count++ 包含读改写,不自动原子;可由同一 Mutex 保护或适当使用 atomic。

Unlock 与后续成功 Lock 建立同步关系。RWMutex 支持多个读者或一个写者,不支持读锁直接升级,也不应递归读锁;持锁时避免慢网络与不受控回调。

WaitGroup 等待完成,不限制并发。兼容常见版本的写法是启动前 Add(1),任务里 defer Done(),最后 Wait;不要等 Wait 可能返回后才由新任务 Add。

sync.Once 首次执行 panic 后也视为已执行,不是失败重试器。sync.Pool 是可能随 GC 清理的临时对象复用池,不是可靠缓存或连接池。

场景与边界 ​

余额检查与扣减等多步不变量应整体保护;逐个字段 atomic 不等于跨字段一致。锁使用后不能复制;原子读与普通写混用也可能竞态。

项目中的应用 ​

沿 SimulSpeak 会话协调核对结果优先级、停止状态、配音派发是否遵循同一同步协议。

常见追问 ​

  • 如何避免死锁? 固定多锁顺序、缩小临界区,避免持锁等待依赖自己释放的任务。
  • 读多就必用读写锁? 短操作和低竞争时可能更慢,按基准判断。
  • race 通过就安全? 只说明本次覆盖路径未检出,不能证明所有调度安全。

参考资料 ​

理解机制,讲清取舍,用复盘检验掌握。