phithon
5.05D
V2EX  ›  Django

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

  •  
  •   phithon ·
    phith0n · Mar 9, 2017 · 4755 views
    This topic created in 3385 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    1 replies    2017-04-09 16:21:32 +08:00
    phithon
        1
    phithon  
    OP
       Apr 9, 2017
    需要
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   936 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 20:14 · PVG 04:14 · LAX 13:14 · JFK 16:14
    ♥ Do have faith in what you're doing.