マルチプロセス用のものがあることを知っています
waitpid(-1,WNOHANG,NULL)
これは、現在作業中の子プロセスがあるかどうかを確認するための非ブロッキング関数呼び出しです。
しかし、マルチスレッドをチェックするための同様のlib関数はありますか?
私がしたいのは、いくつかのグローバル値をリセットしない場合は、現在オンになっているスレッドがあるかどうかを確認することです。
マルチプロセス用のものがあることを知っています
waitpid(-1,WNOHANG,NULL)
これは、現在作業中の子プロセスがあるかどうかを確認するための非ブロッキング関数呼び出しです。
しかし、マルチスレッドをチェックするための同様のlib関数はありますか?
私がしたいのは、いくつかのグローバル値をリセットしない場合は、現在オンになっているスレッドがあるかどうかを確認することです。
スレッドのハンドルを保存して、スレッドがまだ実行されているかどうかを確認する関数を使用できます。関数があるかどうかはわかりませんが、これは機能するはずです。
pthread_kill(pid、0)ここで、pidは、pthread_createが返したスレッドIDであり、スレッドがまだ生きているかどうかを示します。(それがあなたの質問を理解する方法です)スレッドがまだ生きている場合は0を返し、そうでない場合はエラーコードを返します。
これは、現在作業中の子プロセスがあるかどうかを確認するための非ブロッキング関数呼び出しです。
間違い。これは、まだ終了していない子プロセスがあるかどうかを確認するための呼び出しです。そして、それはチェックするだけでなく、もしあれば、終了した子を刈り取ります。それ以外の場合、子供たちは行き詰まりにぶら下がっているなど、考えられる状態にある可能性があります(私の本の内容はうまく機能していません)。
私がしたいのは、いくつかのグローバル値をリセットしない場合は、現在オンになっているスレッドがあるかどうかを確認することです。
おそらく、なぜそれをやりたいのかという質問としてここに投稿する必要があります。あなたはひどく間違ったことをしているようです。
スレッドに対してpthread_join()をまだ実行していない場合は、スレッドがすでにpthread_detach()を実行していることを意味します。スレッドへの追加に問題がなければ、pthread_detach()スレッドにコードを追加して、スレッドが(ほぼ)終了したことを識別し(たとえば、sem_post())、main()が次のことを認識できるようにするのに問題はないと思います。スレッドが終了しました(たとえば、sem_trylock()を呼び出すことによって)。
移植性が要件でない場合は、プロセスのスレッドのOS番号を定期的に照会することもできます。
プログラムにいくつかのスレッドがあり、ライフサイクルが定義されておらず、メインスレッドと適切に同期されていないことは、依然としてIMOの誤りです。