我在上下文切换中获得了一些乐趣。我已将示例代码复制到文件 http://pubs.opengroup.org/onlinepubs/009695399/functions/makecontext.html
我为 OSX 定义了宏 _XOPEN_SOURCE。
#define _XOPEN_SOURCE
#include <stdio.h>
#include <ucontext.h>
static ucontext_t ctx[3];
static void
f1 (void)
{
puts("start f1");
swapcontext(&ctx[1], &ctx[2]);
puts("finish f1");
}
static void
f2 (void)
{
puts("start f2");
swapcontext(&ctx[2], &ctx[1]);
puts("finish f2");
}
int
main (void)
{
char st1[8192];
char st2[8192];
getcontext(&ctx[1]);
ctx[1].uc_stack.ss_sp = st1;
ctx[1].uc_stack.ss_size = sizeof st1;
ctx[1].uc_link = &ctx[0];
makecontext(&ctx[1], f1, 0);
getcontext(&ctx[2]);
ctx[2].uc_stack.ss_sp = st2;
ctx[2].uc_stack.ss_size = sizeof st2;
ctx[2].uc_link = &ctx[1];
makecontext(&ctx[2], f2, 0);
swapcontext(&ctx[0], &ctx[2]);
return 0;
}
我建造它
gcc -o 上下文上下文.c -g
关于获取、制作、交换上下文被弃用的问题。嗯。
当我运行它时,它只是挂起。它似乎没有崩溃。它只是挂起。
我尝试使用 gdb,但是一旦我进入交换上下文,它就是空白的。它不会跳入 f1。我只是一直按回车键,它只会将光标移动到控制台上的新行吗?
知道发生了什么吗?与使用 Mac/弃用方法有关吗?
谢谢