2016-09-29 4 views
1

私は1人のユーザレベルのスレッドライブラリプロジェクトのコードを読んでいます、1つのエピソードのコードは以下の通りです:C++のsetcontext()について、この関数のコードをどのような場合に実行できますか?

/*This function to manage mainthread*/ 
static void main_thread_manager() 
{ 
    mainThread->status = 1; 
    setcontext(&mainThread->context); 
    if(mainThread->exited != 1) 
    { 
     mainThread->finished = 1; 
    } 
    setcontext(&scheduler_context); 
    return; 
} 

このコードは

makecontext(&mainThread->context, (void(*)(void)) main_thread_manager, 0, NULL, NULL);//(1) 

私はこの上の初心者です、ここから使用mainthreadを終了することですフィールド。私はこのコードが正しいと言う必要があります。なぜなら、その行を削除すると、プログラムは終了しないからです。それはあまりにも多いので私はここにすべてのコードをコピーすることはできません。

&scheduler_contextはスケジューラ機能につながり、プロセス全体が終了します。

最初のコードでコードがsetcontext()に実行されるたびに、コンテキストが別の場所に移動するようです。 setcontext()にいくつかのコードが存在するのはなぜですか?

補足:

は、実際には、以下の1つの答えを見た後、私はここにかなっを言及したいと思います。 上記のmakecontextは、mainthreadが作成されるinitial()関数内にあります。しかし、私は他の新しいスレッドを作成するcreate_thread()関数で。まだこのような関数が1つあります。

getcontext(&mainThread->context);//(2) 

それはどういう意味ですか? setcontext(& mainThread-> context)を実行すると、プログラムは最初に(2)を探し、create_threadが終了するとsetcontextは(1)にジャンプしますか? https://stackoverflow.com/questions/39737852/how-dose-makecontext-work-on-the-context-value-about-user-level-threading-lib

答えて

0

setcontextが失敗した場合、setcontextの下のコードが実行されます。

+0

あなたの返信ありがとう、私の補足を読んでいくつかのアイデアを与えることができますか? –

関連する問題