Boost C++ Libraries of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards


Implementations: fcontext_t, ucontext_t and WinFiber


The implementation uses fcontext_t per default. fcontext_t is based on assembler and not available for all platforms. It provides a much better performance than ucontext_t (the context switch takes two magnitudes of order less CPU cycles) and WinFiber.


As an alternative, ucontext_t can be used by compiling with BOOST_USE_UCONTEXT and b2 property context-impl=ucontext. ucontext_t might be available on a broader range of POSIX-platforms but has some (for instance deprecated since POSIX.1-2003, not C99 conform).

[Note] Note

call/cc supports Segmented stacks only with ucontext_t as its implementation.


With BOOST_USE_WINFIB and b2 property context-impl=winfib Win32-Fibers are used as implementation for call/cc.

Because the TIB (thread information block) is not fully described in the MSDN, it might be possible that not all required TIB-parts are swapped.

[Note] Note

The first call of call/cc converts the thread into a Windows fiber by invoking ConvertThreadToFiber(). If desired, ConvertFiberToThread() has to be called by the user explicitly in order to release resources allocated by ConvertThreadToFiber() (e.g. after using boost.context).