Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
makecontext uc_链接导致分段错误_C_Multithreading_Pthreads_Coroutine_Context Switch - Fatal编程技术网

makecontext 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; 然而,当我的线程终止时,它会给我一个分段错误。我的主

我正在尝试创建一个像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;
然而,当我的线程终止时,它会给我一个分段错误。我的主程序还在运行


另外,有人能解释一下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