u_context_t ctx[2];
u_context_t main_ctx;
void func1(void){
if(-1==send())setcontext(ctx[1]);
recv();
return;
}
void func2(void){
if(-1==send())setcontext(ctx[0]);
recv();
return;
}
int main(){
char stack1[2048] = {0};
char stack2[2048] = {0};
char stack3[2048] = {0};
getcontext(&ctx[0]);
ctx[0].uc_stack.ss_sp=stack1;
ctx[0].uc_stack.ss_size=sizeof(stack1);
ctx[0].uc_link = &main_ctx;
makecontext(&ctx[0], func1, 0);
getcontext(&ctx[1]);
ctx[1].uc_stack.ss_sp=stack2;
ctx[1].uc_stack.ss_size=sizeof(stack2);
ctx[1].uc_link = &main_ctx;
makecontext(&ctx[1], func2, 0);
swapcontext(&main_ctx, &ctx[0]);
}
其中 如果有makecontext则跳入指定的函数,如果没有则跳入原先保存上下文的地方。