Bir tarayıcı oyunu için, ben bir veritabanı tablo var fights:
- fightID
- fromID
- söyledim
- simüle (1 = true, 0 = false)
Bir kullanıcı bir sayfa istediğinde, ben select all fights which still have to be simulated:
SELECT fightID, fromID, söyledim FROM fights WHERE simulated = 0
Bu olağanüstü kavgalar daha sonra PHP komut simüle ve, nihayet, the fight is marked as simulated and the winner gets his points edilir:
UPDATE fights SET simulated = 1 WHERE fightID = X
UPDATE users SET points = points+1 WHERE userID = WINNER
The problem:
Sadece birkaç milisaniye içinde sayfanın birbiri ardına gelen iki kullanıcılara düşünün. Hem kullanıcıların en sayfa yük aynı üstün kavgalar seçilir. Sonra simüle edilir ve - her ikisi de hemen hemen aynı anda sayfasını istenen beri - kazanan iki kez yaptığı puan alır. Kavgalar simüle gibi then işaretlenmiş. Ama bu çok geç.
How can I avoid this problem? Thank you very much!