|
2 / 2 / 1
Регистрация: 02.11.2017
Сообщений: 60
|
||||||
Неблокирующая функция15.05.2020, 09:54. Показов 28320. Ответов 94
Метки нет (Все метки)
у меня задача: написать функцию func test(f func(int) int, in1 <-chan int, in2 <- chan int, out chan<- int, n int) в package main.
она n раз сделать следующее 1. прочитать по одному числу из каждого из двух каналов in1 и in2, назовем их x1 и x2. 2. вычислить f(x1) + f(x2) 3. записать полученное значение в out Функция test должна быть неблокирующей, сразу возвращая управление. Функция f может работать долгое время, ожидая чего-либо или производя вычисления. Формат ввода Количество итераций передается через аргумент n. Целые числа подаются через аргументы-каналы in1 и in2. Функция для обработки чисел перед сложением передается через аргумент f. Код на go - вопрос как сделать функцию неблокирующей? в чем у меня ошибка? еще при сборке ругается cannot be extracted via extract ()
0
|
||||||
| 15.05.2020, 09:54 | |
|
Ответы с готовыми решениями:
94
Неблокирующая запись в файл Неблокирующая запись файла
|
|
0 / 0 / 0
Регистрация: 25.05.2020
Сообщений: 12
|
|
| 27.05.2020, 00:22 | |
|
Joker5555
Или можно вместо структуры завести дополнительные каналы с буфером n, обсуждалось уже такое Мне только непонятно, где здесь может быть гонка по считыванию? считыванию чего, какой переменной?
0
|
|
|
0 / 0 / 0
Регистрация: 19.05.2020
Сообщений: 11
|
|||
| 27.05.2020, 00:28 | |||
|
Добавлено через 3 минуты
0
|
|||
|
0 / 0 / 0
Регистрация: 25.05.2020
Сообщений: 12
|
||||||
| 27.05.2020, 00:31 | ||||||
|
Я подумал, что ошибки могут возникать, потому что каналы in1, in2, out не имеют буфера и забиваются, поэтому сделал вот так:
- две получают значения из in1 и in2 по мере поступления и направляют в каналы с буфером - еще две параллельно вычисляют f(x1) и f(x2), на случай если функция высчитывается долго (но при условии что она stateless) - пятая горутина получает итоговое значение и направляет его в out всё это сделано на случай если хитрость задачи в том что каналы забиваются, пока f() высчитывается но это всё ерунда, из входящих каналов все числа поступают без задержек если попытаться передать в out неверное значение (например произвольное), получаешь вполне конкретную ошибку panic: вы передали значение 12345, а нужно 67890
0
|
||||||
|
0 / 0 / 0
Регистрация: 19.05.2020
Сообщений: 11
|
||
| 27.05.2020, 00:35 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 25.05.2020
Сообщений: 12
|
|
| 27.05.2020, 00:38 | |
|
так нет никакой разницы по факту, считаешь ты f() параллельно или последовательно - результат одинаковый
0
|
|
|
0 / 0 / 0
Регистрация: 19.05.2020
Сообщений: 11
|
||
| 27.05.2020, 00:44 | ||
|
panic: Got 142820 from output channel, should be 83602 да вот нет, это результат последовательного выполнения func Merge2Channels(f func(int) int, in1 <-chan int, in2 <-chan int, out chan<- int, n int) { x := 0 y := 0 for i := 0; i < n; i++ { go func() { out <- f(x) + f(y) }() x = <-in1 y = <-in2 } } По сути это и есть WA, с конкретным тестом. Просто RE срабатывает из-за тестирующей системы
0
|
||
|
0 / 0 / 0
Регистрация: 25.05.2020
Сообщений: 12
|
||||||
| 27.05.2020, 00:48 | ||||||
|
У меня вот последовательное вычисление, и оно паник не выдаёт, только wrong answer
0
|
||||||
|
0 / 0 / 0
Регистрация: 19.05.2020
Сообщений: 11
|
|
| 27.05.2020, 00:49 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 25.05.2020
Сообщений: 12
|
||||||
| 27.05.2020, 00:49 | ||||||
я создаю одну горутину, которая всё делает последовательно
0
|
||||||
|
117 / 118 / 52
Регистрация: 19.12.2014
Сообщений: 612
|
|
| 27.05.2020, 05:37 | |
|
korvin_, WA - неверный ответ, но моему мнению, наебашили они охрененные тесты, которые хрен пойми, как работают
0
|
|
|
1 / 1 / 0
Регистрация: 25.05.2020
Сообщений: 12
|
||
| 27.05.2020, 11:23 | ||
|
(Интересно, что на это скажут те, кто и в секунду укладывался...)
0
|
||
|
0 / 0 / 0
Регистрация: 23.05.2020
Сообщений: 8
|
|
| 27.05.2020, 12:02 | |
|
Neko-neko, Действительно, лучше бы для Е тесты исправили. Непонятно что ему не нравится. Судя по отзывам тест на это задание в принципе не проходит, даже если оно корректно. Фиксить не будут, если боятся потерять результаты, непонятно почему бы просто не добавить ещё одно исправленное задание и засчитывать решение любого из них
0
|
|
|
0 / 0 / 0
Регистрация: 19.05.2020
Сообщений: 11
|
||
| 27.05.2020, 12:23 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 25.05.2020
Сообщений: 12
|
||||||
| 27.05.2020, 12:35 | ||||||
|
Я их послание понял так, что всё-таки у нас неправильное решение, чего-то мы не учли
0
|
||||||
|
0 / 0 / 0
Регистрация: 19.05.2020
Сообщений: 11
|
||
| 27.05.2020, 12:39 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 23.05.2020
Сообщений: 8
|
|
| 27.05.2020, 12:54 | |
|
Joker5555, Данные и функция - инты, тут ничего не придумать, иначе RE. Вполне определённый порядок, вычитал один, вычитал другой, записал, с этим тоже проблем нет.
mplain, Очень сомневаюсь, но это мы узнаем только по итогу, если они опубликуют решение, конечно Если что-то не учли, то напишите что? Как можно писать код вслепую без требований?
0
|
|
|
1 / 1 / 0
Регистрация: 25.05.2020
Сообщений: 12
|
|||
| 27.05.2020, 13:12 | |||
|
Почти идеальная, чтобы осталось 40, которых они готовы обучать. С другой стороны: тех, кто её решил, уже учить нечему, можно уже сразу брать на работу :))) Добавлено через 1 минуту ("Ну пишем же...")
0
|
|||
|
0 / 0 / 0
Регистрация: 19.05.2020
Сообщений: 11
|
|
| 27.05.2020, 13:13 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 27.05.2020
Сообщений: 4
|
|||||||
| 27.05.2020, 18:59 | |||||||
|
F PHP 7.3.5 OK - 285ms 2.00Mb В Послании так же писали, что в сети есть решение, которые считаются читерскими, по имени функции гуглится гитхаб, там что-то похожее на правду, но не запускал, чтобы не стать читером =) Смотрите сами. Выводил данные по Merge2Channels в stderr: да, там 30 итераций x1, насколько помню начитнается с 9, потом ++1 x2, начитается где-то между 250-270, потом ++3 данные поступают ровно, без задержек fx() не тормозит Merge2Channels запускается 2 раза Все по памяти, хз как посмотреть старые варианты отравок. Потратил, 70 попыток, запарился, сдаюсь =) Когда, кажется, что все правильно вот такая ошибка
Добавлено через 10 минут добавлю, если результат писать в stderr, то все идет своим чередом
0
|
|||||||
|
0 / 0 / 0
Регистрация: 25.05.2020
Сообщений: 12
|
|||||||||||
| 27.05.2020, 19:49 | |||||||||||
канал продолжает ждать, а ждать нечего Добавлено через 9 минут
main запускает эту функцию дважды подряд, создаются две горутины, которые одновременно начинают посылать значения в out? И обе отрабатывают по 30 итераций? или в сумме? или они последовательно запускаются?
0
|
|||||||||||
| 27.05.2020, 19:49 | |
|
Функция поиска в массиве и указатели + функция сортировки и поиск найденного элемента
Функция sqrt: существует более одного экземпляра. Функция перегруженная Перегрузка операций: friend-функция или функция-член класса Какую библиотеку надо подключать чтоб работала функция _getch() и функция cin.get()? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|