| Home | Libraries | People | FAQ | More

### Implementations: fcontext_t, ucontext_t and WinFiber

Boost.Fiber uses call/cc from Boost.Context as building-block.

##### fcontext_t

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; see section performance) and `WinFiber`.

##### ucontext_t

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 disadvantages (for instance deprecated since POSIX.1-2003, not C99 conform).

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

##### WinFiber

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
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).