锁Lock
你可能会说
两个请求同时扣最后一件库存时,只能让一个先改。请给共享记录加锁,并验证另一个会等待后重新检查。
锁是限制多个执行单元同时访问同一共享资源的并发控制机制。例如两个请求同时修改库存记录,先取得锁的请求完成检查和扣减后释放,另一个等待并重新检查,最终只能一个成功。锁要保护正确的资源范围;错误的加锁顺序可能造成死锁,进程内锁也不会自动保护另一个服务实例。
先知道
也常被叫作互斥锁并发锁Lock
延伸阅读 · 权威出处
两个请求同时扣最后一件库存时,只能让一个先改。请给共享记录加锁,并验证另一个会等待后重新检查。
共享记录没有访问顺序,结果取决于时机。
问题与关键机制:两个请求都读到库存 1 并各自扣减时可能超卖;给共享库存记录加锁,让一个请求完成检查和修改,另一个等待后再检查。
改善看等待后的新判断:并发测试应得到一个成功、一个库存不足,最终库存为 0;锁保证访问顺序,但加锁顺序不一致仍可能造成死锁,跨实例范围也要确认。
第二个场景:诊室排班:两个工作人员同时安排同一诊室时段时,锁应覆盖同一时段记录;先完成者释放后,等待者重新检查,避免两场预约占用同一时段。
请为库存扣减加锁,锁的范围必须覆盖同一条库存记录的检查和修改。记录持有者、等待者、释放和超时;用两个并发请求测试只允许一个成功,另一个取得锁后重新检查并返回库存不足。若服务有多个实例,不要只用各自的进程内锁。