任意のマルチで利用可能であるべきで、一般的なスレッドやプロセスの機能に名前を付けるものですスレッド環境。
メインスレッドが問題の子スレッドをいつ終了させるべきかを判断できるのであれば、 "terminate_conditon"のように子スレッドループをブール値にするか、ハンドルをスレッドで終了させることができます。
// child thread
terminate_condition=FALSE;
while (!terminate_condition)
{
// accept connections
}
child_thread_done=TRUE;
// output results
exit_thread();
// main thread
child_thread_done=FALSE;
child_thread=create_thread (...);
// monitor connections to determine when done
terminate_condition=TRUE;
while (!child_thread_done)
{
sleep (1);
}
// or maybe output results here?
exit_process();
この制御停止液は、1つのスレッドだけchild_thread_doneブールに書き込み、他のスレッドが唯一読み取るようにする必要があります。
それとも
// child thread
while (1)
{
// accept connections
}
// main thread
child_thread=create_thread (...);
// monitor connections to determine when done
kill_thread (child_thread);
// output results
exit_process();
それは単純に子スレッドを殺すため、2番目の形式はメシエです。一般的には、子スレッドに制御された終了を実行させる方がよい(特に、スレッドを割り当てるのではなく、プロセス全体の責任となる)
接続で動作する子スレッドが多数ある場合、同期終了メカニズムが必要です。子スレッドと同数のメンバーを持つ構造体(終了スレッドは、 "terminated"ブール値をtrueに設定し、終了し、メインスレッド構造体を監視して、処理前にすべての子「終了」ブール値が真であることを確認する)、または子スレッドが動作している回数を含むカウンタ(子プロセスが終了しようとしているときにスピンロックによってカウンタを排他制御し、終了前のロック:カウンタがゼロを含む前にメインスレッドは何もしません)。
whileループのコードを投稿できますか? – Brian