着信要求ごとに新しいスレッドを作成するサーバー アプリケーションがあります。
ただし、ときどき、スレッド ID = 0 のスレッドが作成されます (これを確認するには pthread_equal を使用します)。pthread_create で指定された関数に渡すスレッド ID を含む構造体があり、そこでこれをチェックしています。
ID = 0 でスレッドが作成されるのはなぜですか? このような場合、何かできることはありますか?このスレッドは使用できません。すぐに終了したいと思います。
================================================== ===================
typedef struct
{
pthread_t tid;
other_struct_t Other;
} data_ptr_t;
void * worker(void * arg)
{
data_ptr_t local_data;
data_ptr_t * incoming_data = (data_ptr_t *) arg;
if (NULL == incoming_data || NULL == incoming_data->Other)
{
printf("invalid input\n");
}
else if (pthread_equal(incoming_data->tid, 0))
{
printf("invalid thread id\n");
}
else
{
// add to global thread pool
// do other stuff here
// remove from global thread pool
}
}
int main()
{
// server socket stuff
while (1)
{
// if incoming connection is valid
data_ptr_t data;
int error = pthread_create(&(data.tid), NULL, (void * (*) (void *)) worker, (void *) &data);
if (0 != errror)
{
printf("could not create thread (%d)\n", error);
}
else
{
pthread_detach(data.tid);
printf("thread dispatched\n");
}
}
}
注:作成しているスレッドの数が 50 程度以下であれば、問題なく動作します。70 を超えると、ほとんどのスレッドは正常に処理され、残りは「無効なスレッド ID」が出力されます。
注:これは Linux 上にあります。