Search code examples
c++coroutinec++17

How do you implement Coroutines in C++


I doubt it can be done portably, but are there any solutions out there? I think it could be done by creating an alternate stack and reseting SP,BP, and IP on function entry, and having yield save IP and restore SP+BP. Destructors and exception safety seem tricky but solvable.

Has it been done? Is it impossible?


Solution

  • Yes it can be done without a problem. All you need is a little assembly code to move the call stack to a newly allocated stack on the heap.

    I would look at the boost::coroutine library.

    The one thing that you should watch out for is a stack overflow. On most operating systems overflowing the stack will cause a segfault because virtual memory page is not mapped. However if you allocate the stack on the heap you don't get any guarantee. Just keep that in mind.