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?

Foi útil?

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
scroll top