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隔離級別。)