Advertisement
AntonioVillanueva

Ejercicio 2b rutinas y los canales

Apr 19th, 2023 (edited)
849
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.51 KB | None | 0 0
  1. /*
  2. https://gocoding.org/es/ejercicios-de-pr%C3%A1ctica-de-golang/
  3. 2. Escriba un programa que use las rutinas y los canales para crear una aplicación concurrente que realice múltiples tareas simultáneamente.
  4. */
  5.  
  6. package main
  7.  
  8. import (
  9.     "fmt"
  10.     "math/rand"
  11.     "time"
  12. )
  13.  
  14. //Crea un multiplicador temporal aleatorio
  15. func Aleatorio() time.Duration {
  16.     max := 3
  17.     min := 1
  18.     return (time.Duration)(rand.Intn(max-min) + min)
  19. }
  20.  
  21. //Funcion representando un coche que se lanzara en un hilo llamado con go utiliza un canal
  22. func coche1(canal chan string) {
  23.     time.Sleep(time.Second * Aleatorio())
  24.     canal <- "coche 1"
  25. }
  26.  
  27. //Funcion representando un coche que se lanzara en un hilo llamado con go utiliza un canal
  28. func coche2(canal chan string) {
  29.     time.Sleep(time.Second * Aleatorio())
  30.     canal <- "coche 2"
  31. }
  32.  
  33. //Funcion representando un coche que se lanzara en un hilo llamado con go utiliza un canal
  34. func coche3(canal chan string) {
  35.     time.Sleep(time.Second * Aleatorio())
  36.     canal <- "coche 3"
  37. }
  38.  
  39. func main() {
  40.     //Crea los canales de comunicacion
  41.     canal1 := make(chan string)
  42.     canal2 := make(chan string)
  43.     canal3 := make(chan string)
  44.  
  45.     //Arranca las tres rutinas , hilos con su canal correspondiente para enviar datos
  46.     go coche1(canal1)
  47.     go coche2(canal2)
  48.     go coche3(canal3)
  49.  
  50.     select { //El que acaba antes escribe en winner la informacion del canal
  51.     case winner := <-canal1:
  52.         fmt.Println(winner)
  53.  
  54.     case winner := <-canal2:
  55.         fmt.Println(winner)
  56.  
  57.     case winner := <-canal3:
  58.         fmt.Println(winner)
  59.     }
  60.  
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement