|
2 / 2 / 1
Регистрация: 02.11.2017
Сообщений: 60
|
||||||
Неблокирующая функция15.05.2020, 09:54. Показов 27926. Ответов 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
Неблокирующая запись в файл Неблокирующая запись файла
|
|
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
|
|
| 15.05.2020, 11:17 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 18.05.2020
Сообщений: 3
|
|
| 18.05.2020, 13:20 | |
|
_FoCuS, Я так понимаю неблокирующей можно сделать через select {}. А долго время работать наверное с помощью бесконечного цикла
Решили задачу?
0
|
|
|
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
|
|
| 18.05.2020, 14:12 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 18.05.2020
Сообщений: 3
|
|
| 18.05.2020, 14:41 | |
|
korvin_, Почему? А как обойти блокировку на чтение из каналов in1, in2 ?
0
|
|
|
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
|
|
| 18.05.2020, 15:45 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 18.05.2020
Сообщений: 3
|
|
| 18.05.2020, 16:06 | |
|
korvin_, Ну здесь требуется в реализации функции сделать её не блокирующей. А горутина определяется перед вызовом функции.
0
|
|
|
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
|
|
| 18.05.2020, 17:49 | |
|
kashicio, подумай ещё.
0
|
|
|
0 / 0 / 0
Регистрация: 03.05.2020
Сообщений: 1
|
|
| 19.05.2020, 09:24 | |
|
"kashicio, подумай ещё."
Можно уже сказать ответ?
0
|
|
|
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
|
|||||||
| 19.05.2020, 10:51 | |||||||
|
Например:
1
|
|||||||
|
0 / 0 / 0
Регистрация: 19.05.2020
Сообщений: 11
|
|
| 19.05.2020, 12:14 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 20.05.2020
Сообщений: 2
|
|
| 20.05.2020, 18:05 | |
|
вроде все логично, просто и должно работать, однако тестирующая система выдает wrong answer. Откуда здесь неправильный ответ может быть, если надо сумму двух результатов функции надо получить
Добавлено через 5 часов 22 минуты Коллеги, нет идей, в чем может быть проблема? Проверяющая система пишет: panic: Got XXXXX from output channel, should be YYYYY [recovered] panic: Got XXXXX from output channel, should be YYYYY откуда может быть неверный ответ, нужно добавлять синхронизацию потоков какую-то?
0
|
|
|
1 / 1 / 1
Регистрация: 24.02.2011
Сообщений: 14
|
|
| 20.05.2020, 18:57 | |
|
Покажи код, так не понятно. Или у тебя такой же как у ТСа? Судя по ошибке ожидается YYYYY, вместо XXXXX
0
|
|
|
0 / 0 / 0
Регистрация: 20.05.2020
Сообщений: 2
|
||||||||||||||||
| 20.05.2020, 19:45 | ||||||||||||||||
|
]код пробовал как у Korvin и разные вариации со вложенными go func
Добавлено через 4 минуты Второй пример кода неверно скопировал, должно быть вот так, например:
0
|
||||||||||||||||
|
0 / 0 / 0
Регистрация: 22.09.2016
Сообщений: 2
|
||||||
| 23.05.2020, 12:25 | ||||||
|
Привет, ну что у кого-то получилось? Я пытался делать различные вариации на такую тему, пытаясь добавлять проверки на различные граничные условия, но безуспешно. Если кто смог найти решение можно хоть подсказочку на чем ломаться может?) А то уже не первый день пытаюсь:
0
|
||||||
|
0 / 0 / 0
Регистрация: 23.05.2020
Сообщений: 8
|
|
| 23.05.2020, 15:11 | |
|
Аналогичная ситуация, пробовал по всякому. Не хочет принимать и всё тут.
0
|
|
|
0 / 0 / 0
Регистрация: 25.05.2020
Сообщений: 12
|
|
| 25.05.2020, 01:42 | |
|
Вообще в условии не сказано, что каналы готовы поставлять числа моментально
Может быть первый канал успевает поставить два числа, пока второй не поставил ни одного? Если каналы не буфиризируемые, то в зависимости от того, что у них там в main(), программа может крашиться Я сделать пять отдельный горутин (две считывают числа из каналов и перекидывают из в буферицируемые каналы, еще две параллельно высчитывают функцию f() для двух чисел, и еще одна принимает результаты, суммирует и направляет в out Ничего не получается всё равно, wrong answer через 0.6с после начала. Значит дело не в этом... @Carramba select делает только то, что если при попытке считать числа из канала его там нет, то вместо этого отрабатывает default то есть у тебя цикл работает вхолостую и очень быстро вырабатывает все i < n @Gorodok у тебя нигде нет wg.Done(), будет ждать бесконечно. Но вообще я так и не придумал зачем там WaitGroup ещё ты создаёшь n горутин, которые все одновремено пытаются считать числа из входящих потоков. Мне кажется, бардак неизбежен Да, go весёлый язык
0
|
|
|
1 / 1 / 0
Регистрация: 25.05.2020
Сообщений: 12
|
|
| 25.05.2020, 11:01 | |
|
А вот ещё интересно: f() -- "чистая" функция?
Можно ли уверенно сохранять вычисленные результаты, чтобы не вычислять для того же икс несколько раз (раз уж она может долго считаться)? (У меня были уже результаты WA, TL и RE, "вроде должно быть правильно, но...". )
0
|
|
|
0 / 0 / 0
Регистрация: 23.05.2020
Сообщений: 8
|
|
| 25.05.2020, 11:48 | |
|
@mplain тоже так делал, не помогало. Медленные решения получают вердикт Idleness Limit, а у нас WA так что думаю копать сюда смысла нет. Если краш - то было бы RE наверное.
@Neko-neko Хорошая идея с чистой функцией, но по мне маловероятно. Сохранять тоже смысла нет, у нас не IL
0
|
|
|
1 / 1 / 0
Регистрация: 25.05.2020
Сообщений: 12
|
|
| 25.05.2020, 12:20 | |
|
ColdSkull, я пробовал с и без -- у меня всё равно "TL" (time-limit-exceeded) (почему-то не IL)
(сохранял параллельно вычисленные f(x) в хэшмэпах с мьютексом ¯\_(ツ)_/¯). Добавлено через 8 минут Ещё интересно: надо ли закрывать выходной канал после выдачи всех чисел?
0
|
|
| 25.05.2020, 12:20 | |
|
Помогаю со студенческими работами здесь
20
Функция поиска в массиве и указатели + функция сортировки и поиск найденного элемента
Функция sqrt: существует более одного экземпляра. Функция перегруженная Перегрузка операций: friend-функция или функция-член класса Какую библиотеку надо подключать чтоб работала функция _getch() и функция cin.get()? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|