Linux 结束线程

来源:互联网 发布:淘宝 sub msg错误 编辑:程序博客网 时间:2024/05/14 21:30


pthread 线程有两种状态,joinable(非分离)状态和detachable(分离)状态,默认为joinable。

  joinable:当线程函数自己返回退出或pthread_exit时都不会释放线程所用资源,包括栈,线程描述符等(有人说有8k多,未经验证)。

  detachable:线程结束时会自动释放资源。

Linux man page said:

When a joinable thread terminates, its memory resources (thread descriptor and stack) are not deallocated until another thread performs pthread_join on it. Therefore, pthread_join must be called  once  for each joinable thread created to avoid memory leaks.

因此,joinable 线程执行完后不使用pthread_join的话就会造成内存泄漏。

解决办法:

1.// 创建线程前设置 PTHREAD_CREATE_DETACHED 属性

pthread_attr_t attr;
pthread_t thread;
pthread_attr_init (
&attr);
pthread_attr_setdetachstat(
&attr, PTHREAD_CREATE_DETACHED);
pthread_create (
&thread, &attr, &thread_function, NULL);
pthread_attr_destroy (
&attr);


2.当线程为joinable时,使用pthread_join来获取线程返回值,并释放资源。

3.当线程为joinable时,也可在线程中调用 pthread_detach(pthread_self());来分离自己。

分类: c/c++多线程, 每日总结