Vai pthread_detach gerenciar minha memória para mim?
-
02-07-2019 - |
Pergunta
Suponha que eu tenho o seguinte código:
while(TRUE) {
pthread_t *thread = (pthread_t *) malloc(sizeof(pthread_t));
pthread_create(thread, NULL, someFunction, someArgument);
pthread_detach(*thread);
sleep(10);
}
Será que o segmento destacado liberar a memória alocada por malloc, ou isso é algo que eu agora tenho que fazer?
Solução
No. pthread_create () não tem nenhuma maneira de saber que o fio ponteiro passado para ele foi alocada dinamicamente. não pthreads não usar esse valor internamente; ele simplesmente retorna o novo identificador do tópico para o chamador. Você não precisa alocar dinamicamente esse valor; você pode passar o endereço de uma variável local em vez disso:
pthread_t thread;
pthread_create(&thread, NULL, someFunction, someArgument);
Outras dicas
Você precisa liberar a memória sozinho. Seria preferível a simplesmente alocar a variável pthread_t na pilha ao contrário do heap.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow