Реализуйте ProcessPriority, который читает значения из двух каналов —
high (высокий приоритет) и low (низкий) — и возвращает срез всех
обработанных значений.
Правила:
- При наличии данных в обоих каналах сначала обрабатывается
high.
- Не должно быть голодания (starvation)
low: даже при потоке из high
элементы low рано или поздно тоже обрабатываются.
- Функция завершается, когда оба канала закрыты.
// ProcessPriority читает из high и low и возвращает срез обработанных значений.
// При наличии данных в обоих каналах — сначала high. Не должно быть голодания
// low. Останавливается, когда оба канала закрыты.
func ProcessPriority(high, low <-chan int) []int {
// Ваша реализация
}
Подсказка: классический паттерн — сначала неблокирующая попытка прочитать
high (select с default), затем общий select по обоим каналам. При
закрытии канала обнуляйте (= nil) его переменную, чтобы исключить из select,
и выходите, когда оба nil.
На что смотрит интервьюер:
- Приоритет high через вложенный
select с default.
- Обнуление закрытого канала (
nil-канал навсегда блокируется в select).
- Корректное завершение при закрытии обоих каналов без голодания low.