私は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
あなたの返信ありがとう、私の補足を読んでいくつかのアイデアを与えることができますか? –