1

我正在尝试制作像 pthreads 这样的用户级线程库。我正在使用makecontext() / swapcontext()在线程之间进行切换,并且在为线程创建上下文时,我将uctx_main传递给上下文中的uc_link字段。

context.uc_stack.ss_sp = thread->c_stack;
context.uc_stack.ss_size = sizeof(thread->c_stack);
context.uc_link = &uctx_main;

但是,当我的线程终止时,它会给我一个分段错误。我的主程序仍在运行。

另外,有人可以解释一下uctx_main是什么吗?它是主要功能的默认上下文吗?我需要为我创建的每个线程都有一个uctx_main吗?很抱歉问了这么愚蠢的问题,但我在谷歌上没有找到任何东西。

4

1 回答 1

1

根据您的参考,我假设uctx_main您正在遵循Linux 手册页中makecontext()的示例。

在该示例中,uctx_main是主线程的上下文,在调用setcontext()switch时设置uctx_func2

uctx_mainuctx_func1除了它是从主线程设置的(并且在示例中被设置为后继)之外,它在任何方面都没有什么特别之处。

通常,您创建的每个线程都需要有一个上下文。

于 2013-01-29T09:51:25.483 回答