/* Page prose (fr) */
"WrappingUp" = "# Récapitulatif\n\nChaque bug de ce chapitre pousse d'une seule graine: un état mutable partagé, touché par un travail concurrent, sans rien qui coordonne l'accès. Ce qui rend une data race si dangereuse, c'est qu'elle se cache, donc un test qui passe ne prouve rien d'autre que de la chance. Les points à retenir ci-dessous sont en réalité une seule habitude: apprendre à repérer cette forme en lisant, et savoir comment la neutraliser.\n\n* Une **data race** est un accès concurrent à un état mutable partagé avec au moins un écrivain; une **condition de course** est n'importe quel bug dont le résultat dépend du timing.\n* Les courses sont **non déterministes**: généralement correctes, parfois fausses, rarement reproductibles. Tu les attrapes en *lisant* à la recherche d'un état partagé-et-muté, pas en exécutant; une exécution au vert prouve seulement que tu as eu de la chance cette fois-ci.\n* `x += 1` et les mises à jour de dictionnaires/tableaux sont du **lire-puis-écrire** avec un intervalle, pas atomiques. Cet intervalle est là où vit la corruption.\n* Corrige en coordonnant l'accès: une **file en série** (un à la fois) ou une **file concurrente avec des écritures `.barrier`** (lecteurs-écrivains). Tout accès à un morceau d'état doit passer par le *même* coordinateur: cache-le dans un type pour que ceux qui l'appellent ne puissent pas le contourner.\n* Un **interblocage** est une attente circulaire permanente. Ne fais jamais `sync` sur la file sur laquelle tu es déjà, surtout pas `DispatchQueue.main.sync` depuis le thread principal.\n* L'**inversion de priorité** est une tâche de haute priorité bloquée sur une ressource que retient une tâche de basse priorité; garde les sections critiques courtes et ne mélange pas des QoS très différentes sur un même verrou.\n\n---\n\n## La suite\n\n**[Operations](Operations.playgroundchapter/Overview)**: envelopper des unités de travail comme des objets réutilisables que tu peux nommer, configurer, annuler et enchainer, avec `Operation` et `OperationQueue`.\n\n[Précédent](@previous)  |  page 9 sur 9";
