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