2011-11-17 41 views
7

从makecontext体力劳动...为什么makecontext不并行线程

由于目前的并行线程执行,makecontext不应该在对并行线程(3)链接库程序中使用的限制(线程是否用过或没有)。

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

我想要实现这样的事情...

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

因此,在这种情况下,我想执行的函数Ç时使用一个独立的堆栈。

+0

非常难的问题;-p!没有Aswers呢! – MetallicPriest

+0

你想使用'makecontext'/etc做什么?他们的主要目的是实现线程库,当pthreads已经存在时,这很愚蠢。 – duskwuff

+0

@duskwuff,我不使用它来进行线程化。 – MetallicPriest

回答

9

由于目前的并行线程实施限制,makecontext不应该在哪个环节对并行线程(3)库的程序使用

这本手册的部分适用于Linux线程,它用来圆%esp值可以找到当前线程描述符。如果你在一个备用堆栈上执行,那么(显然)不会产生一个有效的线程描述符。

LinuxThreads不再被最近5年以上发布的任何Linux使用,并且{get,make,swap}context在NPTL线程中工作得很好。

编辑:其实,我只看到了“因限制”中NetBSD docs,而不是在Linux docs

当我做swapcontext,我得到分割故障飘飞

你,现在,然后作为一个分段错误显示出来的错误。您没有提供足够的信息来猜测该错误的可能位置。

+1

很高兴知道它现在起作用。谢谢你的答复EmployedRussian :-p!是的,这确实是我现在修复的一个错误。 – MetallicPriest