标准答案

  1. 互斥锁保证同一时刻一个执行者进入临界区,简单但高竞争时会降低吞吐。
  2. 读写锁允许多个读者并行,但写者可能饥饿,锁升级和实现公平性会增加复杂度。
  3. 乐观版本号把冲突检测放在提交时,失败后由业务决定重试、合并或提示用户。
  4. CAS 适合短小的单变量更新;复杂不变式仍需要更高层的事务或锁。

题目解析

互斥锁适合临界区短、实现简单且冲突需要立即串行化的场景;读写锁只有在读多写少、读操作确实可以并行且锁实现开销可接受时才有收益。

乐观版本号和 CAS 把冲突检测推迟到提交点,适合冲突较少、失败可合并或可重试的工作;冲突频繁时,反复失败和重试可能比直接排队更昂贵。

跨进程或跨机器时,进程内锁和 CAS 不能直接保护共享数据库或外部资源。最终正确性仍应由存储层条件、唯一约束或可验证的版本令牌承担。

常见误区

  • 误区:读写锁一定比互斥锁快。改正:读写锁有状态和调度成本,只有读多写少且读能并行时才可能获益。
  • 误区:CAS 失败后无限自旋。改正:设置重试上限、退避或转入锁/队列,避免高竞争下持续消耗 CPU。
  • 误区:版本冲突直接静默覆盖。改正:根据业务选择合并、重试、提示冲突或拒绝,不能把并发更新丢失当成成功。

作者信息