/* Page prose (fr) */
"Overview" = "# Groupes et sémaphores\n\nDe retour au café du coin, un client commande une tournée pour tout le bureau: un latte, un cold brew et un espresso. Tu lances les trois d'un coup pour qu'ils infusent en parallèle. Bien. Mais maintenant tu as un nouveau problème. Tu ne peux tendre le plateau au client que lorsque **les trois** sont prêts, et chacun se termine à son propre rythme. Comment ton code *sait*-il que la tournée est complète? Et que se passe-t-il quand cinq baristas veulent l'unique machine à espresso au même moment? Ce chapitre parle de coordonner un groupe de tâches indépendantes: les attendre toutes, et limiter combien s'exécutent à la fois.\n\n---\n\n## Ce que tu vas apprendre\n\n* Comment attendre toute une tournée de tâches asynchrones avec un **`DispatchGroup`**.\n* L'équilibre `enter()`/`leave()`, `notify(queue:)` et `wait()`, et pourquoi `wait()` bloque.\n* Le classique bug de `enter`/`leave` déséquilibré, et comment il se bloque ou plante.\n* Comment un **`DispatchSemaphore`** limite combien de tâches touchent une ressource à la fois.\n* Quand recourir à un groupe plutôt qu'à un sémaphore.\n\nCe chapitre s'appuie sur le chapitre [Fondamentaux de GCD](GCD%20Fundamentals.playgroundchapter/Overview): tu sais déjà comment pousser du travail sur une file avec `async`, et la différence entre files en série et files concurrentes. Maintenant tu vas coordonner ce travail.\n\nQuand tu es prêt, tourne la page et nous lancerons une tournée de boissons de la manière naïve, et nous regarderons ça mal tourner.\n\npage 1 sur 8  |  [Suivant: Le problème: savoir quand tout est terminé](@next)";
