本文共 480 字,大约阅读时间需要 1 分钟。
最近碰到一个低概率问题:
10
加40
加60
预期结果是110, 但最终实际结果是50
单机单进程场景,来看下:
func proc() { amount := queryAmountFromDb() begin lock begin transaction amount += req.OrderAmount setToDb(amount) end transaction end lock}
平常没问题,但是,当两个请求并发而来时, 就有问题了------典型的覆盖写问题。 改成如下即可:
func proc() { begin lock begin transaction amount := queryAmountFromDb() amount += req.OrderAmount setToDb(amount) end transaction end lock}
搞定, 不多说。
补充: 后来又遇到过一次100-40-60=40的问题, 哈哈。
转载地址:http://gyrvi.baihongyu.com/