Параллелизм ч.2: Напишите программу 3

Сообщения
1 471
Реакции
271
Сайт
tehadm.ru
Вам необходимо написать функцию calculator следующего вида:
C-подобный:
func calculator(firstChan <-chan int, secondChan <-chan int, stopChan <-chan struct{}) <-chan int
Функция получает в качестве аргументов 3 канала, и возвращает канал типа <-chan int.

  • в случае, если аргумент будет получен из канала firstChan, в выходной (возвращенный) канал вы должны отправить квадрат аргумента.
  • в случае, если аргумент будет получен из канала secondChan, в выходной (возвращенный) канал вы должны отправить результат умножения аргумента на 3.
  • в случае, если аргумент будет получен из канала stopChan, нужно просто завершить работу функции.
Функция calculator должна быть неблокирующей, сразу возвращая управление. Ваша функция получит всего одно значение в один из каналов - получили значение, обработали его, завершили работу.

После завершения работы необходимо освободить ресурсы, закрыв выходной канал, если вы этого не сделаете, то превысите предельное время работы.
 
C-подобный:
package main

import (
    "fmt"
)

func calculator(firstChan <-chan int, secondChan <-chan int, stopChan <-chan struct{}) <-chan int {
    output := make(chan int)
    go func(ch chan int) {
        defer close(ch)

        select {
        case x := <-firstChan:
            ch <- x * x
        case x := <-secondChan:
            ch <- x * 3
        case <-stopChan:
        }
    }(output)

    return output
}

func main() {
    ch1 := make(chan int)
    ch2 := make(chan int)
    stop := make(chan struct{})

    result := calculator(ch1, ch2, stop)

    ch1 <- 3   

    fmt.Println(<-result)
}
 
Назад
Верх Низ