V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
phithon
V2EX  ›  Django

用了 transaction.atomic 还需要用 select_for_update 么?

  •  
  •   phithon ·
    phith0n · 2017-03-09 14:36:56 +08:00 · 4173 次点击
    这是一个创建于 2851 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如何消除条件竞争相关的漏洞,比如商品购买的逻辑,先判断用户是否有足够的金币,有则扣除金币,增加购买日志。

    如果两个线程同时访问这个逻辑,就可以造成在第一个线程还没扣除用户金币的情况下第二个线程也过了判断,最后金币扣成负数。

    如果我将这一堆逻辑放在一个 view 里,并在 view 的外层使用 @transaction.atomic 修饰,是不是可以保证不会出现上述问题?

    这种情况下,还需要调用 select_for_update 么?

    有篇文章说了一下 https://kuanyui.github.io/2015/03/14/django-db-transaction/ ,但我还是不太肯定,特地来请教大家

    1 条回复    2017-04-09 16:21:32 +08:00
    phithon
        1
    phithon  
    OP
       2017-04-09 16:21:32 +08:00
    需要
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2849 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 07:55 · PVG 15:55 · LAX 23:55 · JFK 02:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.