Отдельный pthread вызывает утечки памяти

Eстьизвестная утечка памятипри завершении процесса с запуском незадействованных потоков. Однако отсоединение нити неКажется, это решение. Рассмотрим следующий минимальный пример:

#include 
#include 

static void* thread(void* _) {
  for(;;); return NULL;
}

int main(void) {
  pthread_attr_t attr; 
  pthread_attr_init(&attr);
  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
  pthread_t tid; pthread_create(&tid, &attr, thread, NULL);
  pthread_attr_destroy(&attr);
  return 0;
}

Создается отдельный поток с бесконечным циклом, и процесс немедленно завершается. В соответствии сpthread_detach(3)ресурсы потока должны автоматически возвращаться обратно в систему после завершения всего процесса. Это, однако, явно нет чтопроисходит:

gcc -pthread c.c
valgrind --leak-check=full a.out

==9341== Command: a.out
==9341==
==9341==
==9341== HEAP SUMMARY:
==9341==     in use at exit: 272 bytes in 1 blocks
==9341==   total heap usage: 1 allocs, 0 frees, 272 bytes allocated
==9341==
==9341== 272 bytes in 1 blocks are possibly lost in loss record 1 of 1
==9341==    at 0x4C2ABB4: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==9341==    by 0x4012598: _dl_allocate_tls (dl-tls.c:296)
==9341==    by 0x4E3C7B5: pthread_create@@GLIBC_2.2.5 (allocatestack.c:579)
==9341==    by 0x400825: main (in /home/witiko/a.out)
==9341==
==9341== LEAK SUMMARY:
==9341==    definitely lost: 0 bytes in 0 blocks
==9341==    indirectly lost: 0 bytes in 0 blocks
==9341==      possibly lost: 272 bytes in 1 blocks
==9341==    still reachable: 0 bytes in 0 blocks
==9341==         suppressed: 0 bytes in 0 blocks

Должен ли я быть обеспокоен? В реальной программе у меня есть несколько блокирующих потоков, так что, как и в минимальном примере, я могуправдаpthread_join() с ними. Должен ли я звонитьpthread_cancel() вместоexit()Инг напрямую?

Ответы на вопрос(1)

Ваш ответ на вопрос