不使用pthread_detach或pthread_join,是否不会为其他新创建的线程清除资源?

Nik*_*hil 2 c linux multithreading pthreads

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;
    }
Run Code Online (Sandbox Code Playgroud)

代码说明:

  1. 块1:变量“选择”将始终为1,并且将始终为执行某些任务而创建线程。
  2. 块2:创建线程后,该块再次等待“ retry_time(通常为1小时)”以创建一个新线程来执行相同的任务。

题:

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

谢谢。

dav*_*let 5

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