Guest User

Untitled

a guest
Jul 18th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.66 KB | None | 0 0
  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func listener (id int, port chan int, quit chan bool) {
  6. // port -- канал, на который приходит входной сигнал (значение типа int)
  7. // quit -- канал, на который приходит сигнал о завершении работы
  8. for { // запускаем бесконечный цикл прослушивания
  9. select { // смотрим с каких каналов пришли сигналы
  10. case input := <-port: // пришло значение по каналу данных
  11. fmt.Println( "Listener#", id, " recived ", input )
  12. case <-quit: // пришел сигнал завершения
  13. return // завершаем процедуру listener
  14. }
  15. }
  16. }
  17.  
  18. func make_listener (id int, port chan int) (quit chan bool) {
  19. quit = make(chan bool) // создаем новый канал завершения потока
  20. go listener( id, port, quit ) // создаем поток, в котором запускается listener
  21. return quit // возвращаем канал для завершения потока
  22. }
  23.  
  24. func main () {
  25. const( N = 5; M = 10 )
  26. var input_port chan int = make(chan int) // создаем канал данных
  27. var listener [N]chan bool // список потоков-слушателей
  28.  
  29. for i := 0; i < N; i++ { // создаем слушателей
  30. listener[i] = make_listener( i, input_port )
  31. }
  32.  
  33. for i := 0; i < M; i++ { // посылаем в поток данных значения [0..M]
  34. input_port <- i
  35. }
  36.  
  37. for i := 0; i < N; i++ {
  38. listener[i] <- true // посылаем слушателям сигналы завершения
  39. }
  40. }
Add Comment
Please, Sign In to add comment