getcontext makecontext setcontext swapcontext
允许在一个程序中多个线程进行切换.
typedef struct ucontext {
struct ucontext *uc_link; // 当前 thread 运行完后, 接着运行 uc_link
sigset_t uc_sigmask; // 阻塞的信号集
stack_t uc_stack; // current context use stack
mcontext_t uc_mcontext; // thread's machine register
}
getcontext(ucontext *ucp)
: 初始化一个 context currently active context
setcontext
: 恢复一个 context.
- 如果 context 是从getcontext获得,那么程序继续执行.
- 如果 context 是从makecontext获得, 先执行 func 然后执行 uc_link.
-
context 从 signal handler 获得, 那么行为未确定.
makecontext(ucontext_t *ucp, void (*func)(), int argc, ...)
: 用于修改 context(obtain from a call to getcontext), 使用 setcontext swapcontext activate, 先执行func, 然后执行 ucp->uclink(if ucp->uclink pointer is NULL, the thread exits),swapcontext(ucontext_t *oucp, ucontext_t *ucp)
: 保存当前 context, activated ucp