makecontext uc_link给出了分段错误

时间:2013-01-27 04:49:42

标签: c multithreading pthreads context-switch

我正在尝试创建像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吗?很抱歉提出这么愚蠢的问题,但我没有在Google上搜索任何内容

1 个答案:

答案 0 :(得分:1)

我假设你引用uctx_main,你正在关注Linux man page for makecontext()中的例子。

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

除了从主线程设置(并在示例中设置为uctx_main的后继者)之外,

uctx_func1在任何方面都不是特殊的。

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