Conditions de concurrence : Le dernier cookie
Un cookie est posé sur une assiette. Vous et votre frère ou sœur le voyez. Vous essayez tous les deux de le saisir en même temps.
Les ordinateurs font aussi cela. C'est une condition de concurrence (race condition).
Ce bug se produit lorsque deux tâches s'exécutent en même temps. Le résultat dépend de qui gagne la course.
Exemple : Deux personnes achètent le dernier article en stock.
- La personne A lit le stock. Il est de 1.
- La personne B lit le stock. Il est de 1.
- La personne A l'achète. Le stock devient 0.
- La personne B l'achète. Le stock devient 0.
Vous avez expédié deux articles. Vous n'en aviez qu'un seul.
Le schéma est toujours le même. Lire. Décider. Écrire.
Il y a un intervalle au milieu. Quelqu'un s'y glisse.
Corrigez cela en faisant de la vérification et de la modification une étape unique et verrouillée. Laissez la base de données gérer la soustraction.
Les conditions de concurrence surviennent ici :
- La vente du dernier billet.
- La création de deux comptes avec une seule adresse e-mail.
- Comme des compteurs qui perdent des valeurs.
Évitez ces erreurs :
- Dire que « ça marche sur ma machine ».
- Ajouter un délai de pause (
sleep) pour corriger le problème. - Faire confiance à une lecture effectuée il y a un instant.
Recherchez le schéma « lire, vérifier, écrire » dans votre code. Imaginez deux utilisateurs agissant à la même milliseconde. Est-ce que les deux gagnent ?
Si oui, vous avez trouvé une condition de concurrence.
Source: https://dev.to/edriso/race-condition-when-two-things-reach-for-the-same-cookie-36do