0
我有以下状态:Django的独特如果条件
用户A“控制了”资源R的
我需要确保没有人会对R接入,直到管理员说
它确定使用它。
我现在有:
当用户采取的R控制我节省了国旗在DB。 (该标志与
的R - 如果真那么R取)
的问题是,如果用户尝试在同一第二拿到[R可以有
情况的他们都得到R(因为线程时间)。
我该如何预防?
我有以下状态:Django的独特如果条件
用户A“控制了”资源R的
我需要确保没有人会对R接入,直到管理员说
它确定使用它。
我现在有:
当用户采取的R控制我节省了国旗在DB。 (该标志与
的R - 如果真那么R取)
的问题是,如果用户尝试在同一第二拿到[R可以有
情况的他们都得到R(因为线程时间)。
我该如何预防?
没有任何代码示例很难正确回答您的问题。
不过,我想你想是这样的:
num_updated = Resource.objects.filter(id=1, is_taken=False).update(is_taken=True)
was_taken = (num_updated == 1)
这将创建一个单独的原子数据库查询。如果is_taken
是False
,它将被设置为True
和返回值是1。如果资源已被使用,但是,没有行匹配,并且返回值是0。
这应该是免费比赛条件(至少,它将在PostgreSQL中使用默认的Read Committed隔离级别。)