博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pthread_create 内存泄漏 valgrind
阅读量:5233 次
发布时间:2019-06-14

本文共 1161 字,大约阅读时间需要 3 分钟。

  • pthread_create()在使用的过程中遇到的一个问题:

      今天在使用线程的时候出现了一个问题,利用valgrind监测程序的运行时出现了memory leak。感觉到很奇怪,这样的情况应该不会发生的啊,毕竟是系统的函数。去网上搜了下,发现国内国外都有这个问题 呵呵。大概了解了下原因:创建的线程需要进行join或者detach状态,这样才能保证创建线程过程中分配的内存得以释放,才能避免memory leak的情况。因此,记得需要将线程进行join或者detach。

       线程的分离状态决定一个线程以什么样的方式来终止自己。线程的默认属性是非分离状态,这种情况下,原有的线程等待创建的线程结束。只有当pthread_join()函数返回时,创建的线程才算终止,才能释放自己占用的系统资源。而分离线程不是这样子的,它没有被其他的线程所等待,自己运行结束了,线程也就终止了,马上释放系统资源。程序员应该根据自己的需要,选择适当的分离状态。

有以下的方法来解决这个问题:

  1. 1、创建线程,使用默认的非分离状态,然后进行join

pthread_create(&threadid, NULL, func, NULL);

pthread_join(threadid, &state);

  • 2、创建线程时利用pthread_attr_setdeatchstate()指定线程的属性为PTHREAD_CREATE_DETACHED

pthread_attr_t attr;

pthread_attr_init(&attr);

pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);

pthread_create(&threadid, &attr, func, NULL);

pthread_attr_destroy(&attr);

    • 3、在默认创建完进程后,使用pthread_detach函数,使得线程处于detach状态;或者在func中调用pthread_detach函数,线程自行退出

pthread_create(&threadid, NULL, func, NULL);

pthread_detach(threadid);

或者:

pthread_create(&threadid, NULL, func, NULL);

void* func(void*)

{

pthread_detach(pthread_self());

return ((void*)0);

}

参考文章:

以及其他。。。。

原文地址:

转载于:https://www.cnblogs.com/java20130726/archive/2013/05/26/3218487.html

你可能感兴趣的文章
linux常用命令
查看>>
NHibernate.3.0.Cookbook第四章第6节的翻译
查看>>
使用shared memory 计算矩阵乘法 (其实并没有加速多少)
查看>>
Django 相关
查看>>
git init
查看>>
训练记录
查看>>
IList和DataSet性能差别 转自 http://blog.csdn.net/ilovemsdn/article/details/2954335
查看>>
Hive教程(1)
查看>>
第16周总结
查看>>
C#编程时应注意的性能处理
查看>>
Fragment
查看>>
比较安全的获取站点更目录
查看>>
苹果开发者账号那些事儿(二)
查看>>
使用C#交互快速生成代码!
查看>>
UVA11374 Airport Express
查看>>
P1373 小a和uim之大逃离 四维dp,维护差值
查看>>
NOIP2015 运输计划 树上差分+树剖
查看>>
P3950 部落冲突 树链剖分
查看>>
读书_2019年
查看>>
读书汇总贴
查看>>