makecontext uc_链接导致分段错误
我正在尝试创建一个像pthreads这样的用户级线程库。我使用makecontext()/swapcontext()在线程之间进行切换,在为线程创建上下文时,我将uctx_main传递给上下文中的uc_链接字段makecontext uc_链接导致分段错误,c,multithreading,pthreads,coroutine,context-switch,C,Multithreading,Pthreads,Coroutine,Context Switch,我正在尝试创建一个像pthreads这样的用户级线程库。我使用makecontext()/swapcontext()在线程之间进行切换,在为线程创建上下文时,我将uctx_main传递给上下文中的uc_链接字段 context.uc\u stack.ss\u sp=thread->c\u stack; context.uc_stack.ss_size=sizeof(线程->c_堆栈); context.uc_link=&uctx_main; 然而,当我的线程终止时,它会给我一个分段错误。我的主
context.uc\u stack.ss\u sp=thread->c\u stack;
context.uc_stack.ss_size=sizeof(线程->c_堆栈);
context.uc_link=&uctx_main;
然而,当我的线程终止时,它会给我一个分段错误。我的主程序还在运行
另外,有人能解释一下uctx_的主要功能吗?它是主函数的默认上下文吗?对于我创建的每个线程,是否需要一个uctx_main?很抱歉问了这么一个愚蠢的问题,但我在谷歌上找不到任何东西。从您对
uctx_main
的引用中,我假设您正在遵循中的示例
在该示例中,uctx_main
是主线程的上下文,在调用setcontext()
切换到uctx_func2
时设置该上下文
uctx_main
在任何方面都不是特别的,除了它是从主线程设置的(并且在本例中被设置为uctx_func1
的后续线程)
一般来说,您创建的每个线程都需要有一个上下文。从您对
uctx_main
的引用中,我假设您正在遵循中的示例
在该示例中,uctx_main
是主线程的上下文,在调用setcontext()
切换到uctx_func2
时设置该上下文
uctx_main
在任何方面都不是特别的,除了它是从主线程设置的(并且在本例中被设置为uctx_func1
的后续线程)
一般来说,您创建的每个线程都需要一个上下文。在这种情况下,我不确定,但是如果您要交换上下文,那么您交换的所有线程都必须有一个上下文。这意味着,如果“main函数”在初始化您的库之后再次运行,它应该作为线程库中的线程运行,因此必须有一个上下文来交换。在这种情况下我不确定,但是如果你想交换上下文,你交换的所有东西都必须有一个上下文。这意味着,如果“main函数”在初始化您的库之后再次运行,它应该作为线程库中的线程运行,因此必须有一个上下文来交换。T