加锁失效,非锁之过,加之错也|京东零售供应链库存研发实践
本文导读
从事京东零售供应链库存业务,库存数量操作增减十分频繁,并且项目开发中会常常遇到各种并发情况,一旦库存数量操作有误,势必给前台销售产生损失影响,因此需要关注对库存数量并发操作下的一致性问题。
大部分情况下,加锁可以很好地解决并发问题,但是只要加上锁后就一定不会有并发问题吗?哪些情况下引起锁失效呢?本文会以一个真实的线上案例来剖析业务处理加锁过程易使用不当的点以及对应的解决方案。 01 引言 多个进程或线程同时(或着说在同一段时间内)访问同一资源会产生并发问题。 比如:银行两操作员同时操作同一账户就是典型的例子。比如A、B操作员同时读取一余额为1000元的账户,A操作员为该账户增加100元,B操作员同时为该账户减去 50元,A先提交,B后提交。最后实际账户余额为1000-50=950元,但本该为1000+100-50=1050。这就是典型的并发问题。 从事零售供应链库存业务,对库存数量操作增减十分频繁,同样存在类似上述银行取款遇到的问题,库存数量操作有误势必给前台销售产生损失影响,因此需要关注对库存数量并发操作下的一致性。 下面通过一个真实的案例分享在并发情况下如何保证库存数量的准确性。 02 问题是什么-加锁失效 看看下面这段流程和代码,思考会有并发问题吗?