chabapok ([personal profile] chabapok) wrote 2025-02-24 08:10 am (UTC)

В с++20 корутинах не меняется местами стек.

все локальные переменные и служебные структуры выделяются на куче при первом вызове, и потом твой механизм в нужном порядке стартует, тормозит, продолжает, бросает/перехватывает исключения, диспетчерезирует по потокам, удаляет корутины, которые должны отмениться "в середине исполнения". Так же, твой механизм ответственен за запуск корутины и за проброс результата ее исполнения вызывающей стороне, причем как в случаях, когда ты ее вызываешь из не-корутинного кода - так и в случаях, когда одна корутина зовется из другой.

И так же, никто не сказал, что старт/ожидание/завершение корутин должно быть строго вложенным. Одна корутина может запустить другую корутину, и они могут обмениваться друг с другом данными и что-то с данными делать (генераторы/co_yield). Получается: чуток одна поработала, выдала результат - потом другая использует этот результат. Поработала-поработа - потом снова первая работает дальше, и так далее.

Это все надо как-то разруливать, и есть сколько-то точек, в которых ты должен все это поведение описать.

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting