getcontext не перемещается в новый поток, setcontext () и swapcontext () делают.
Ваша библиотека потоков должна реализовывать как минимум эти 2 функции:
Возможность создания новой темы.
Возможность переключения на другой поток.
В первом случае вы вызываете getcontext () для инициализации ucontext_t, выделяете память для стека и устанавливаете указатель стека в ucontext_t, затем вызываете makecontext () для инициализации контекста с помощью начальной функции.
Во втором случае вы вызываете getcontext (), чтобы сохранить контекст для текущего потока, и setcontext (), чтобы переключиться на другой поток, который вы ранее сохранили. Или, чаще, вы бы использовали swapcontext, объединяющий вызовы get / setcontext.
Смотрите, например здесь для очень простого способа реализации кооперативных потоков с помощью get / setcontext.