[pthread] pthread_join 与 pthread_detach

文章出处:http://donghao.org/2010/01/pthread-pthread-joinoepthread.html

 

pthread_t  pthr;

pthread_create( &pthr, NULL, thread_handler, NULL );

 

...

 

void* thread_handler( void* arg )

{

 

    /* do something */

    pthread_join( pthr,  NULL );

 

}

 

    上面的代码不好使,pthread_join不能放在pthread调用的handler内,虽然不报错,但是thread无法正常回收,如果多次创建thread,内存会越来越大(另一种形式的内存泄漏)。

 

    正确的做法是在handler外面 pthread_join:

pthread_t  pthr;

pthread_create( &pthr, NULL, thread_handler, NULL );

pthread_join( pthr,  NULL ); 

 

...

 

void* thread_handler( void* arg )

{

 

    /* do something */

   

}

 

如果不用pthread_join,改用pthread_detach呢? 那最方便,但要注意:pthread_detach最好是放在handler里面第一句

void* thread_handler( void* arg )

{

 

    pthread_detach( pthr ); 

    /* do something */

   

}

 

如果pthread_create后面紧跟pthread_detach,有可能会出错。

你可能感兴趣的:(JOIN,thread,null,2010)