不使用pthread_detach或pthread_join,不会为其他新创build的线程清理资源?

Below is my code snippet. int main ( ) { some instructions; while ( 1 ) { /* Block 1 : Starts*/ if ( selection == 1 ) { ret = pthread_create ( &tid, NULL, &select_n_process_req, NULL ); if ( ret != 0 ) { printf ("Error Creating Thread"); } } /* Block 1 : Ends*/ /* Block 2 : Starts*/ printf ("Sleeping for [%d]", retry_time * 60 * 60); for ( i = 0; i < retry_time * 60 * 60; i++ ) { if ( stop_flag == 1 ) { printf ("Process Stopped\n"); break; } sleep ( 1 ); } /* Block 2 : ENDS*/ } some instructions; return SUCCESS; } int select_n_process_req ( void ) { some instructions; return SUCCESS; } 

守则解释:

  1. 方块1:variables“select”将始终为1,线程将始终创build用于执行一些任务。
  2. 方块2:一旦线程被创build,这个块再次等待“retry_time(通常是1小时)”来创build一个新线程来完成同样的任务。

题:

  1. 我没有调用任何pthread_join或pthread_detach,但我从函数“select_n_process_req”返回(它将终止线程)。 这将不清除分配给pthread_create的资源吗?
  2. 我发现奇怪的是,在一些负载之后,pthread_create根本没有被调用。 这是因为我没有使用pthread_detach或pthread_join?

谢谢。

您必须调用pthread_join (来自父线程)或pthread_detach ,或者通过将附加属性传递给pthread_create来创建处于分离状态的线程。 看到这里: http : //man7.org/linux/man-pages/man3/pthread_create.3.html