現在、メイン スレッドが 3 つの子スレッドを作成するプログラムを作成しています。これらのスレッドは同時に実行されています。私がやりたいことは、子スレッドの 1 つが完了したら、出力が正しいかどうかを確認することです。そうである場合は、他の 2 つのスレッドを終了します。そうでない場合は、このスレッドの結果を破棄し、他の 2 つのスレッドの結果を待ちます。
pthread_create を使用して、メイン関数で 3 つの結果を作成しています。しかし、結合機能の使い方がわかりません。メイン関数で join 関数を 3 回使用すると、3 つのスレッドが完了するまで 1 つずつ待機します。
私の計画は次のとおりです。
int return_value;
main(){
pthread_create(&pid[0], NULL, fun0, NULL);
pthread_create(&pid[1], NULL, fun1, NULL);
pthread_create(&pid[2], NULL, fun2, NULL);
}
fun0(){
...
if( check the result is right ){
return_value = result;
if (pid[1] is running) pthread_kill( pid[1], SIGTERM );
if (pid[2] is running) pthread_kill( pid[2], SIGTERM );
}
fun1() ...
fun2() ...
関数 0、1、および 2 は互いに類似しており、1 つの関数が正しい答えを持つと、他の 2 つのスレッドが強制終了されます。ただし、プログラムの実行中に pthread_kill が処理されると、1 つのスレッドだけでなく、プログラム全体が終了します。どうしてか分かりません。
そして、このプログラムをコーディングする他の方法があるかどうかはまだわかりません。これから私を助けてくれてありがとう。