Ответ 1
На самом деле, boost coroutine был двунаправленным, когда он был впервые включен в boost (1.53, я думаю).
http://www.boost.org/doc/libs/1_53_0_beta1/libs/coroutine/doc/html/coroutine/coroutine.htm
Этот код должен быть совместим с самой последней версией boost, с незначительной модификацией.
Кроме того, вы можете напрямую использовать boost:: context, чтобы создать свой собственный класс coroutine.
http://www.boost.org/doc/libs/1_55_0/libs/context/doc/html/index.html
Параметр "intptr_t vp" fcontext_swap может использоваться для передачи значений/указателей взад и вперед, или вы можете хранить значения в самой сопрограмме, так как переменные-члены вашего класса coroutine должны быть действительными из обоих контекстов.
изменить
Короткий ответ на ваш первоначальный вопрос - нет. То, что вы просите, не может быть сделано. Каждая сопрограмма имеет собственный стек и контекст, которые недоступны из других экземпляров coroutine. Кроме того, когда вы переходите в контекст coroutine, состояние вызывающего контекста хранится в экземпляре , который coroutine, а переход обратно в исходный контекст может быть выполнен только путем вызова в аргумент > , который сопроводил вашу функцию.
Но переменные, объявленные вне локальной области сопрограммы, будут действительны изнутри и вне функции сопрограмм. Таким образом, вы можете использовать coroutine:: push_type и нажимать указатель вместо значения. Вы можете использовать это значение и затем изменить его, прежде чем переходить к исходному контексту.
Кроме того, вы можете безопасно передавать указатели на локальные переменные в сопрограмму coroutine, так как они не будут уничтожены до тех пор, пока вы не вернетесь из сопрограммы и не завершите выполнение области вызова.