pthread_join ou pthread_detach Subroutine

Propósito

Bloqueia ou deteta o fio de chamada até que o encadeamento especificado seja finalizado.

Biblioteca

Biblioteca de encadeamentos (libpthreads.a)

Sintaxe

#include <pthread.h>

int pthread_join (thread, status)
pthread_t thread;
void **status;

int pthread_detach (thread)
pthread_t thread;

Descrição

A subroutine pthread_join bloqueia a thread de chamada até que a thread thread seja terminada. O status de finalização da thread de destino é retornado no parâmetro status .

Se o fio de destino já estiver finalizado, mas ainda não descolado, a subroutine retornará imediatamente. É impossível aderir a um fio descolado, mesmo que ainda não esteja finalizado. O encadeamento de destino é descolado automaticamente após todos os threads unidos terem sido woken para cima.

Essa subroutina não faz por si só um fio a ser finalizado. Ele age como a subroutinha pthread_cond_wait para esperar por uma condição especial.

Nota: O arquivo de cabeçalho pthread.h deve ser o primeiro arquivo incluído de cada arquivo de origem usando a biblioteca de encadeamentos. Caso contrário, deve ser usada a sinalização de compilação -D_THREAD_SAFE , ou o compilador cc_r utilizado. Neste caso, a sinalização é automaticamente definida.

A subroutine pthread_detach é usada para indicar para a implementação que o armazenamento para a thread cujo ID de thread esteja no local thread pode ser reafirmado quando esse encadeamento terminar. Este armazenamento deve ser reafirmado na saída de processo, independentemente de o encadeamento ter sido descolado ou não, e pode incluir armazenamento para valor de retorno thread . Se thread ainda não tiver finalizado, pthread_detach não deve fazer com que ele finalize. Múltiplas chamadas pthread_detach sobre o mesmo encadeamento de destino causa um erro.

Parâmetros

Item Descrição
Encadeamento Especifica o encadeamento de destino.
status Pontos para onde o status de finalização do fio de destino será armazenado. Se o valor for NULL, o status de finalização não será retornado.

Valores De Retorno

Se bem-sucedida, a função pthread_join retorna zero. Caso contrário, um número de erro é retornado para indicar o erro.

Códigos De Erro

As funções pthread_join e pthread_detach falharão se:

Item Descrição
EINVAL A implementação detectou que o valor especificado por thread não se refere a um encadeamento articulável.
ESRCH Nenhum fio poderia ser encontrado correspondente ao especificado pelo ID de thread fornecido.

A função pthread_join falhará se:

Item Descrição
EDEADLK O valor da thread especifica o encadeamento de chamada.

A função pthread_join não retornará um código de erro de EINTR.