Deux clients, une seule place
Deux clients réservent la dernière place au même instant. Chacun reçoit une confirmation. Un seul a une place, et c'est votre accueil qui l'apprend au second. Cette page vous laisse provoquer la panne vous-même, sur trois façons d'écrire le même code.
En deux mots
Le problème. Quand deux clients valident la même dernière place au même instant, un site qui n'a pas prévu le cas accepte les deux. Deux confirmations partent, une seule place existe.
Ce que ça coûte. Le second se présente à l'atelier avec un numéro de réservation qui ne correspond à rien. Il faut lui trouver un autre créneau sur place, devant les clients qui attendent leur tour.
Ce que cette page permet. Provoquer la panne vous-même, en un clic, sur trois façons d'écrire le même code. Deux la produisent, dont celle que la documentation donne pour correcte.
Provoquez la panne
Un créneau d'atelier avec trois postes de pose, et six clients qui valident au même instant. Choisissez une façon d'écrire le code, puis lisez ce que le serveur a réellement fait. Chaque visiteur reçoit son propre bac à sable, effacé au bout de trois heures, donc rien de ce que vous faites ici ne sort de votre écran.
-
Les boutons agissent ici
Mardi 14h00
Trois postes de pose disponibles sur ce créneau.
3 / 3
Places libres
-
Mercredi 9h00
Deux postes de pose disponibles sur ce créneau.
2 / 2
Places libres
-
Mercredi 16h00
Un seul poste, le créneau part entier.
1 / 1
Place libre
Réservation non payée rendue dans Quinze minutes en production, une minute ici pour que ça se voie.
Le faire à la main, dans deux onglets
Ouvrez cette page dans deux onglets, choisissez la même méthode dans les deux, et cliquez sur « Un seul client » au même instant. Deux clics humains ratent souvent la fenêtre, qui se compte en millisecondes. C'est pour ça que le bouton principal en lance six d'un coup, sans le moindre délai entre elles. Si la course ne se produit pas, le rapport le dit au lieu de la fabriquer.
Le rapport s'affichera ici. Il dit ce que chaque client a obtenu, et combien de places l'atelier tient réellement.
Ce que le serveur a fait
Ce qui se passe entre la lecture et l'écriture
Réserver une place demande de lire le nombre de places restantes, de le diminuer de un, puis de réécrire le résultat. Tant qu'un seul visiteur est là, ces gestes se suivent sans incident. À deux visiteurs simultanés, le second lit la valeur avant que le premier n'ait écrit la sienne. Il écrase alors une réservation qu'il n'a jamais vue.
Aucune erreur ne s'affiche nulle part. Les deux clients reçoivent une confirmation, le compteur affiche un nombre cohérent, et le journal du serveur reste vide. Le défaut attend le jour de la pose pour se manifester.
La rareté porte ici sur un créneau de pose, pas sur un article de catalogue. Un tee-shirt en quatre tailles et trois coloris se gère très bien avec une référence et un stock par déclinaison, nous l'avons écrit dans vendre du produit sur mesure en ligne. Ce qui casse, c'est la ressource unique disputée au même instant, la dernière place d'une session ou le créneau d'un technicien.
Pourquoi fermer la porte à clé ne suffit pas ici
La deuxième méthode est celle du manuel. Elle pose un verrou pendant l'opération, exactement comme le recommande la documentation. Sur un serveur ordinaire elle fonctionne, le second client attend son tour et le compte est juste. C'est ce qu'écrit un développeur à qui on signale le problème.
Sur un hébergement mutualisé, non. Les fichiers y vivent sur un disque partagé par le réseau, où deux programmes peuvent obtenir la même clé en même temps. Nous l'avons mesuré le 25 juillet 2026 depuis un fichier de ce site. Le code paraît correct et la documentation lui donne raison. Il perd quand même des réservations, sans qu'aucun journal ne le signale. Choisissez la méthode du manuel plus haut et comptez les confirmations.
La troisième méthode ne répare pas le verrou, elle supprime le besoin d'en avoir un. Chaque place devient un jeton portant son propre nom, et réserver revient à prendre ce jeton. Deux clients qui visent le même, un seul l'obtient, parce que le système d'exploitation garantit qu'un nom ne peut être créé qu'une fois. Plus de lecture suivie d'une écriture, donc plus rien à protéger.
Le compteur n'est pas le seul à mentir
Une place réservée se voit tout de suite, parce que ça se termine par un client mécontent à l'accueil. Trois autres règles de la même commande d'atelier se trompent plus discrètement, et se découvrent à la comptabilité. Elles suivent, dans l'ordre où elles coûtent cher.
Le panier, à manipuler
Les deux règles qui suivent se lisent mal sur un exemple figé. Changez une quantité et regardez les tableaux se recalculer. Le seuil bascule, l'écart d'un centime apparaît ou disparaît. On voit alors qu'aucune des lectures n'est plus fausse que les autres.
Règle 1 sur 3
L'ordre des opérations sur un seuil
La règle commerciale tient en une phrase : reprise et livraison du véhicule offertes à partir de 300,00 euros. Personne n'a précisé si le seuil se compare au total avant ou après la remise, ni en hors taxes ou en toutes taxes comprises. Celui qui écrit la règle ne voit pas qu'il y a quatre montants, donc il ne précise rien.
| Base de comparaison | Unité | Montant comparé | Franchise | Total TTC |
|---|---|---|---|---|
| Total avant remise | Hors taxes | 329,65 | Acquise | 356,01 |
| Total avant remise | Toutes taxes | 395,58 | Acquise | 356,01 |
| Total après remise | Hors taxes | 296,68 | Non acquise, frais facturés | 410,01 |
| Total après remise | Toutes taxes | 356,01 | Acquise | 356,01 |
Quatre lectures, deux montants possibles, et 54,00 euros d'écart sur la même commande. La franchise étant tout ou rien, quatre bases de comparaison ne donnent pas quatre totaux, elles donnent trois avis contre un. Aucune des quatre n'est fausse. Tant que la règle écrite ne dit pas laquelle s'applique, c'est le logiciel qui tranche, et le jour où un client compare sa facture à celle de son voisin, personne ne sait dire pourquoi elles diffèrent.
Règle 2 sur 3
L'arrondi de la TVA
La TVA s'arrondit au centime, mais sur quoi ? Ligne par ligne, puis on additionne, ou bien on additionne d'abord et on arrondit une seule fois. Ces deux méthodes existent dans de vrais logiciels de facturation, et elles ne donnent pas toujours le même montant.
| Méthode d'arrondi | TVA | Total TTC |
|---|---|---|
| Arrondi sur chaque ligne, puis somme | 68,33 | 410,01 |
| Somme des lignes, puis arrondi une fois | 68,34 | 410,02 |
Les deux méthodes s'écartent d'un centime sur cette commande. Un centime ne fâche personne le jour même. Multiplié par le nombre de commandes d'une année et confronté à un journal comptable, il occupe une demi-journée à chercher d'où il vient.
Règle 3 sur 3
L'expiration d'une réservation non payée
Une place bloquée et jamais payée doit revenir au stock, sinon un panier abandonné retire une place à tout le monde, indéfiniment. Le délai est de quinze minutes en production, ramené à une minute dans ce démonstrateur pour que le retour de la place se voie pendant votre visite. Réservez une place et regardez le compte à rebours.
Démonstrateur interactif. Atelier fictif, prestations et prix fictifs.
Ce que ça change sur un vrai projet
Aucune de ces trois règles ne relève du web. Elles viennent du métier. L'atelier sait combien de postes il a, le gérant sait à partir de quel montant il offre la reprise, le comptable sait comment il arrondit. Le travail du développeur commence après : transcrire ces règles sans les trahir, puis vérifier qu'elles tiennent quand deux personnes cliquent au même instant.
C'est aussi pour cette raison que nous mesurons le comportement de l'hébergement au lieu de nous fier à la documentation. Un verrou qui ne verrouille pas n'apparaît dans aucun journal d'erreur. Il se voit en lançant six requêtes et en comptant. La même exigence traverse nos autres démonstrateurs, de l'analyseur de données structurées à l'optimiseur de tournée, et notre approche du développement sur mesure détaille la méthode.
Une plateforme de réservation, un planning d'interventions. Si votre métier a des ressources uniques et des clients simultanés, le problème est déjà dans votre code. Il attend deux demandes tombées dans la même milliseconde, ce qui devient d'autant plus fréquent que le trafic monte.
Un planning que deux personnes remplissent en même temps
Décrivez-nous ce que vos clients réservent et ce qui arrive quand deux d'entre eux visent la même chose. Nous regardons ensemble ce qui doit être garanti et ce que ça coûte vraiment.