MotifPattern

Deux cuisiniers écrivaient sur la même ardoiseDes contrôles écrits pour une exécution unique cèdent dès que deux exécutions se recouvrentTwo cooks were writing on the same slateControls written for one run at a time break once two runs overlap

La cuisine avait été organisée pour une seule paire de mains. Deux cuisiniers y ont partagé le même plan, la même ardoise et le même tiroir de clés. Un plat correct a alors pu arriver à la mauvaise table sans qu’aucun cri n’alerte la salle.Un contrôle rangeait les conditions d’environnement et les données de problème de chaque exécution dans des champs ordinaires d’une instance unique ; une fois les exécutions parallèles, deux d’entre elles pouvaient s’écraser et un résultat être enregistré sous le mauvais dossier de problème. Le même motif se retrouve sur un stockage d’identifiants partagé et sur un checkout unique utilisé par plusieurs exécutions. La concurrence ne crée pas ces défauts : elle rend visible une propriété d’état qui n’avait jamais été déclarée.The kitchen had been arranged for one pair of hands. Two cooks shared the same bench, slate, and key drawer. A correct dish could then reach the wrong table without a single shout in the room.One control kept per-run environment conditions and problem data in ordinary fields of a single shared instance; once runs overlapped, two of them could overwrite each other and a result could be filed under the wrong problem directory. The same shape turns up in a shared credential store and in one checkout used by several runs at once. Parallelism does not introduce these defects; it exposes ownership of state that was never declared.

Les plans de travailConcurrence et isolationThe worktopsConcurrency and isolation

Le bon plat est parti à la mauvaise tableSignauxThe right dish reached the wrong tableSignals

Cherchez ce que toute la brigade touche en un seul exemplaire : l’ardoise, le plan ou les clés. Méfiez-vous aussi d’une assiette impeccable qui arrive à une table qui ne l’a jamais demandée. Le défaut peut disparaître pendant un service calme avec un seul cuisinier.Un état propre à chaque exécution rangé dans des champs communs à toutes ; un stockage d’identifiants unique écrit par plusieurs processus ; un checkout unique utilisé par des exécutions simultanées. Second signal : un résultat correct attribué au mauvais objet, sans erreur levée. Troisième : un défaut absent en exécution sérielle, dont l’entrelacement ne se reproduit pas sans barrières explicites.Look for anything the whole brigade touches in a single copy: the slate, bench, or keys. Watch also for a perfect plate reaching a table that never ordered it. The fault may disappear during a quiet service with one cook.Per-run state held in fields common to every run; one credential store written by several processes; one checkout used by simultaneous runs. Second signal: a correct result attributed to the wrong object, with no error raised. Third: a defect absent from serial execution, whose interleaving will not reproduce without explicit barriers.

Chaque main faisait son travail, l’ardoise mélangeait les lignesMécanismeEvery hand did its job, and the slate mixed the linesMechanism

Chaque cuisinier faisait le geste habituel. Le problème était l’ardoise unique, incapable de dire à qui appartenait chaque ligne. Tant qu’un seul cuisinier travaillait, personne ne remarquait le manque.Tant qu’une seule exécution vit à la fois, la propriété de l’état est implicite et n’est jamais contredite. Le passage au parallèle change le modèle de propriété sans changer le modèle de stockage : les champs restent communs alors que leur contenu est devenu propre à chaque exécution. Le défaut étant temporel, une lecture du code ne montre qu’une écriture de champ banale et les tests sériels restent verts.Each cook made the usual move. The problem was the single slate, which could not say whose line was whose. While one cook worked, nobody noticed the missing answer.While only one run is ever live, ownership of state is implicit and never contradicted. Parallelism changes the ownership model and leaves the storage model untouched: the fields stay common once their contents have become private to each run. Because the defect is timing-dependent, the code reads as an ordinary field assignment and serial tests stay green.

Donner une ardoise et un plan à chaque cuisinierRéponseGive every cook a slate and a benchResponse

Donnez à chacun son ardoise, son plan et ses clés, distribués par la maison. Avant de jeter une clé, vérifiez qu’elle est bien la vôtre et qu’elle n’a pas été changée. Rejouez aussi le double service un soir calme au lieu d’attendre le coup de feu.L’état propre à une exécution appartient à une tâche, un thread, un contexte asynchrone ou une identité d’exécution explicite, jamais à un champ partagé. Le travail parallèle reçoit un workspace par exécution, dont l’allocation passe de la discipline du développeur à une infrastructure gérée par le runtime. Une transition destructive sur un état partagé se lie à la génération qu’elle croit remplacer, et une erreur récupérable ne doit pas la déclencher. Ces défauts se vérifient par des tests déterministes à barrières, pas par un entrelacement espéré.Give every cook a slate, bench, and keys supplied by the house. Before throwing away a key, check that it is yours and that no one changed it. Rehearse the two-cook service on a quiet evening instead of waiting for the rush.Per-run state belongs to a task, a thread, an async context or an explicit run identity, never to a shared field. Parallel work gets one workspace per run, and that allocation is moving from developer discipline into runtime-managed infrastructure. A destructive transition over shared state must be bound to the generation it believes it is replacing, and a retryable error must not trigger it. These defects are checked with barrier-based deterministic tests rather than hoped-for interleavings.

Une chose partagée peut gâcher deux servicesLeçonOne shared thing can spoil two servicesLesson

Dès que deux services travaillent ensemble, ce qu’ils partagent peut mêler leurs commandes. Donnez à chacun sa place et son matériel. Ce qui doit rester commun demande une vigilance avant tout geste irréversible.Un état partagé devient un risque de corruption partagé dès la première exécution concurrente. Le raisonnement parallèle exige une isolation parallèle du workspace, et une erreur récupérable ne doit jamais ouvrir une transition irréversible.Once two services work together, anything they share can mix their orders. Give each one its own place and tools. Whatever must remain shared needs care before any irreversible move.Shared state becomes shared corruption risk at the first concurrent run. Parallel reasoning needs parallel workspace isolation, and a recoverable error must never open an irreversible transition.