Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import "fmt"
- func listener (id int, port chan int, quit chan bool) {
- // port -- канал, на который приходит входной сигнал (значение типа int)
- // quit -- канал, на который приходит сигнал о завершении работы
- for { // запускаем бесконечный цикл прослушивания
- select { // смотрим с каких каналов пришли сигналы
- case input := <-port: // пришло значение по каналу данных
- fmt.Println( "Listener#", id, " recived ", input )
- case <-quit: // пришел сигнал завершения
- return // завершаем процедуру listener
- }
- }
- }
- func make_listener (id int, port chan int) (quit chan bool) {
- quit = make(chan bool) // создаем новый канал завершения потока
- go listener( id, port, quit ) // создаем поток, в котором запускается listener
- return quit // возвращаем канал для завершения потока
- }
- func main () {
- const( N = 5; M = 10 )
- var input_port chan int = make(chan int) // создаем канал данных
- var listener [N]chan bool // список потоков-слушателей
- for i := 0; i < N; i++ { // создаем слушателей
- listener[i] = make_listener( i, input_port )
- }
- for i := 0; i < M; i++ { // посылаем в поток данных значения [0..M]
- input_port <- i
- }
- for i := 0; i < N; i++ {
- listener[i] <- true // посылаем слушателям сигналы завершения
- }
- }
Add Comment
Please, Sign In to add comment