为什么makecontext不能与pthreads一起使用

Met*_*est 7 c linux x86 pthreads

从makecontext手册...

由于当前pthread实现的限制,makecontext不应该在链接到pthread(3)库的程序中使用(无论是否使用线程).

现在我的问题是,为什么它不起作用以及有哪些替代方法.实际上我有兴趣在某些点上在用户级线程中切换堆栈,但我看到当我执行swapcontext时,我偶尔会出现分段错误.我该怎么办?

我希望实现这样的目标......

void thread_func(void * thread_args)
{
 a();
 b();
 getcontext/makecontext/swapcontext to call c();
 d();
 ....
}
Run Code Online (Sandbox Code Playgroud)

所以在这种情况下,我想在执行函数c时使用单独的堆栈.

Emp*_*ian 9

由于当前pthread实现的限制,makecontext不应该在链接到pthread(3)库的程序中使用

本手册的这一部分适用于LinuxThreads,它用于将%esp值向上舍入以查找当前线程描述符.如果您在备用堆栈上执行,那么(显然)不会产生有效的线程描述符.

在过去5年多的时间里,任何Linux发行版都不再使用LinuxThreads,而且{get,make,swap}contextNPTL线程的工作正常.

编辑:实际上,我只看到NetBSD文档中的"由于限制" ,而不是Linux文档.

当我做swapcontext时,我偶尔会遇到分段错误

您有一个错误,偶尔会显示为分段错误.您还没有提供足够的信息来猜测该错误的位置.