Boost.Coroutine provides templates for generalized subroutines which allow multiple entry points for suspending and resuming execution at certain locations. It preserves the local state of execution and allows re-entering subroutines more than once (useful if state must be kept across function calls).
Coroutines can be viewed as a language-level construct providing a special kind of control flow.
In contrast to threads, which are pre-emptive, coroutine switches are cooperative (programmer controls when a switch will happen). The kernel is not involved in the coroutine switches.
The implementation uses Boost.Context for context switching.
This library is a follow-up on Boost.Coroutine by Giovanni P. Deretta.
In order to use the classes and functions described here, you can either include the specific headers specified by the descriptions of each class or function, or include the master library header:
which includes all the other headers in turn.
All functions and classes are contained in the namespace boost::coroutines.
Boost.Coroutine depends on Boost.Context, Boost.Exception, Boost.FunctionTypes, Boost.Move, Boost.MPL, Boost.Optional, Boost.Preprocessor, Boost.Range, Boost.ResultOf, Boost.SmartPtr, Boost.StaticAssert, Boost.Tuple, Boost.TypeTraits as well as Boost.Utility and requires Boost-1.52.0.