2011-11-17 57 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