Existe um ID pthread_t inválido?

Gostaria de chamar pthread_join para um determinado ID de thread, mas apenas se esse thread tiver sido iniciado. A solução segura pode ser adicionar uma variável para rastrear qual thread foi iniciado ou não. No entanto, gostaria de saber se é possível verificar as variáveis pthread_t, algo como o seguinte códig

pthread_t thr1 = some_invalid_value; //0 ?
pthread_t thr2 = some_invalid_value;

/* thread 1 and 2 are strated or not depending on various condition */
....

/* cleanup */
if(thr1 != some_invalid_value)
    pthread_join(&thr1);

if(thr2 != some_invalid_value)
    pthread_join(&thr2);

Onde some_invalid_value pode ser 0 ou uma macro 'PTHREAD_INVALID_ID' dependente da implementação

PS: Minha suposição é que os tipos pthread_t são comparáveis e atribuíveis, suposição com base em

PPS: Eu queria fazer isso, porque pensei que chamar pthread_join no ID de thread inválido era um comportamento indefinido. Não é. No entanto, ingressar em um segmento ingressado anteriormente é um comportamento indefinido. Agora vamos assumir que a "função" acima é chamada repetidamente. Chamar incondicionalmente pthread_join e verificar o resultado pode resultar em chamar pthread_join em um thread ingressado anteriorment

questionAnswers(4)

yourAnswerToTheQuestion