线程create、exit、join、detach,线程内存泄漏

1.先说下pthread_join()函数

原型:int pthread_join(pthread_t thread, void **retval);   

参数:

thread:等待去回收的线程tid;

retval:默认为NULL;

返回值: 0 成功;失败 有对应的错误码

——————————————————————————————————————

这个函数一个目的:去阻塞等待某个线程tid的结束,然后去回收它的资源;

原理:用了函数pthread_join()后,主线程会单独创建一个线程去阻塞等待指定的线程结束;如果没结束会一直等待着(阻塞的含义);当发现指定的线程tid结束后,会去回收那个线程的资源,防止内存泄漏;

join字面意思:也可以理解为      该join线程负责等待把指定的进程tid加入到主进程(回收到主进程);

___________________________________________________________________________

那么问题来了,为什么有有这个pthread_join()回收线程资源函数呢?

其实你在用pthread_creat()创建出线程时,这个线程有两种状态:joinable和unjoinable

如果你创建时是unjoinable状态,那么在线程返回或者exit后,系统会自动回收资源;

如果创建时是joinable状态,那么在线程结束后,占用的资源并不会完全释放,这时候就需要用pthread_join()函数去阻塞等待回收那个线程tid的资源;

当然还有一种方法: 在创建线程的时候加上一个分离:

pthread_detach( pthread_self() );  //分离自身的线程tid;你create的线程状态就会改为unjoinable(会自己回收资源那种)

这样在线程结束后,分离的线程资源会被系统自己回收,

——————————————————————————————————————————————————

总结: 用pthread_creat()函数创建线程时,如果不注意去join或者detach,就很可能(或者是一定)出现内存泄漏的情况。

 

你可能感兴趣的:(线程创建,资源回收,分离,join,Linux常用工具)