1

以下のコードがあります。

void *timer1_function(void * eit);
pthread_t timer1;
int thread_check1 = 0;

line72: thread_check1 = pthread_create( &timer1, NULL, timer1_function,  NULL);

Valgrind は以下の出力を表示し、 に問題があることを示していますline 72pthread_create上記の使用法の何が問題になっていますか?

272 bytes in 1 blocks are possibly lost in loss record 2 of 5
  in main in main.c:72
  1: calloc in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so
  2: _dl_allocate_tls in /build/buildd/eglibc-2.15/elf/dl-tls.c:297
  3: pthread_create@@GLIBC_2.2.5 in /build/buildd/eglibc-2.15/nptl/allocatestack.c:571
  4: main in <a href="file:///home/user/Project-build-desktop-Qt_4_8_1_in_PATH__System__Release/../project/main.c:72" >main.c:72</a>
4

1 に答える 1

5

スレッドを作成するときは、スレッドにメモリを割り当てます。このメモリをクリーンアップするタスクは、 への呼び出しによって行われますpthread_join

このメモリがスレッドの終了時にクリーンアップされない理由は、これらのデータに「スレッドの終了ステータス」などの情報が含まれているためです。これは、親が後でチェックアウトする必要がある場合があります。したがって、joinスレッドを決して ing しないということは、そのメモリを決してクリーンアップしないことを意味します。

結合されていないスレッドの概念は、ゾンビ プロセスに似ています。

于 2012-06-20T16:25:44.430 に答える