如何消除条件竞争相关的漏洞,比如商品购买的逻辑,先判断用户是否有足够的金币,有则扣除金币,增加购买日志。
如果两个线程同时访问这个逻辑,就可以造成在第一个线程还没扣除用户金币的情况下第二个线程也过了判断,最后金币扣成负数。
如果我将这一堆逻辑放在一个 view 里,并在 view 的外层使用 @transaction.atomic 修饰,是不是可以保证不会出现上述问题?
这种情况下,还需要调用 select_for_update 么?
有篇文章说了一下 https://kuanyui.github.io/2015/03/14/django-db-transaction/ ,但我还是不太肯定,特地来请教大家