170 похожих чатов

Есть такая структура кода: несколько отдельных функций, которые что-то выполняют.

Для удобства пользователя есть одна основная функция Run(), которая внутри просто последовательно вызывает все другие, более мелкие функции, чтобы можно было использовать только одну её, вместо того, чтобы по-отдельности вызывать каждую маленькую функцию.

Эта основная Run() функция выполняет полностью всю работу, необходимую от неё. То есть, конкретно в моем случае, создаёт докер контейнер, выполняет его, собирает с него логи и удаляет этот контейнер.

Отдельные функции пользователю запускать именно в горутинах будет бессмысленно, так как важен порядок их выполнения. То есть с горутинами получится так, что контейнер может быть сначала удалён, только потом создан и никогда не остановлен, что, очевидно, не то, что от программы ожидается.

Эта основная функция Run() делает всё, что нужно и в правильном порядке.

Вопрос в том, насколько безопасно с точки зрения последовательности выполнения кода запускать Run() в горутине? Гарантированы ли последовательные вызовы всех функций внутри Run()? Правильно ли я понимаю, что concurrency в данном случае затронет только выполнение нескольких запусков Run(), но не того, что внутри них? То есть можно ли в цикле запустить несколько горутин Run() и быть спокойным, что всё выполнится правильно?

2 ответов

11 просмотров

То есть, если обобщить всё, то вопрос сводится к: "если функция запущена в горутине, то в таком же ли порядке выполняются действия, как и при запуске без горутины?" Да, в таком же порядке. Главное - это следить за доступом к каким-то общим ресурсам

synalice- Автор вопроса

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта