それが無期限にぶら下がっている場合は、はい、何らかの種類のブロッキングが関係しています(またはポーリングなど...関数で何かが発生して戻ってこない)。
この問題について投稿した他の質問から、ハングした特定のスレッドを強制終了したい場合は、スレッドIDを「終了」フラグを持つ構造体として設定することができます。
#include <pthread.h>
#include <signal.h>
struct thread_id
{
pthread_t thread;
sig_atomic_t thread_flag;
};
void init_thread_id(struct thread_id* id)
{
id->thread_flag = 0;
}
thread_id threads[NUMBER_OF_THREADS];
void* thread_function(void* arg)
{
thread_id* my_id = (thread_id*)arg;
//do something in your thread
//when you finish, set the flag for that thread
my_id->thread_flag = 1;
}
タイムアウトアラームを設定したら、の配列をスクロールして、thread_id
どれが終了したかを確認します。終了したものは、呼び出すことができます。それ以外の場合は、スレッドを使用して、またはスレッドを停止するためpthread_join
に、スレッドにシグナルを送信できます。pthread_kill
pthread_cancel