Aller au contenu principal
U/
Concurrence
go

N goroutines envoient sur un channel

Lancer 3 goroutines qui envoient chacune leur identifiant entier sur un channel chan int, puis consommer les 3 valeurs dans main et les afficher, en acceptant un ordre d'arrivée non garanti.

35 minPublié le 20 mai 2026Proposé par Anonyme

Défi

// Lisez attentivement, codez sur votre machine

Énoncé

Créer un channel non bufferisé ch := make(chan int). Lancer 3 goroutines avec go func(id int) { ch <- id }(i) pour i valant 1, 2 et 3. Dans main, recevoir exactement 3 valeurs depuis ch dans une boucle for et les afficher avec fmt.Println. Comme les goroutines s'exécutent de façon concurrente, l'ordre des valeurs reçues n'est pas garanti et peut varier d'une exécution à l'autre.

Contraintes

  • Compilé avec go build (Go 1.21+).
  • Utiliser un channel non bufferisé (make(chan int) sans second argument).
  • Aucun sync.WaitGroup ni time.Sleep : la synchronisation repose uniquement sur le channel.
  • Exactement 3 réceptions dans main : pas de close(ch) ni de range.
  • Packages autorisés : fmt uniquement.

Exemple

Exécution possible (l'ordre peut varier) :

2
1
3

Autre exécution possible :

1
3
2

Les trois identifiants 1, 2 et 3 sont toujours présents, dans un ordre indéterminé.

Espace solution

Proposer une solution

Connectez-vous ou créez un compte pour envoyer votre code (aucune exécution côté serveur — on stocke juste le texte pour la communauté).

// À garder en tête
  • D'abord, faire marcher

    On ne cherche pas à optimiser : d'abord, on fait marcher le truc. Optimiser vient ensuite — et ça aussi, ça s'apprend. (Si un défi porte sur l'optimisation, son énoncé le précise.)

  • Pas de mauvaise réponse

    Il n'y a pas de mauvaise réponse à un défi. Le but, c'est de le faire. Ce qui compte, c'est de s'entraîner.

  • Trop dur ? Au suivant

    Un défi te résiste ? N'hésite pas à en prendre un autre. Ils seront encore là demain.