Dans mon application rails, j'ai du code comme ceci :
def foo
if object_bar_exists
raise "can't create bar twice!"
end
Bar.create
end
Quel pourrait être invoqué par deux requêtes différentes envoyées au serveur d'application. Si ce code est exécuté par deux requêtes simultanément, et qu'elles exécutent toutes les deux la vérification du if
en même temps, aucune ne trouvera le bar
de l'autre, et 2 bar
seront créés.
Quel est le meilleur moyen de créer un "mutex" pour "la collection de bars" ? Une table de mutex spécifique dans la base de données ?
mise à jour
Je tiens à souligner que je ne peux pas utiliser un mutex en mémoire ici, car la concurrence est entre des requêtes/processus et non des threads.