b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

pthread_create属性设置不正确会导致内存泄漏.

电脑杂谈  发布时间:2020-03-28 00:15:14  来源:网络整理

createthread传递参数_createthread内存泄露_createthread创建线程

最近解决了隐藏的内存泄漏问题. 我们的过程是HA模式. 用户不断切换,这将导致内存持续增长. 切换一次,然后再切回将增加大约8M的内存. 原因是pthread_create之后的僵尸线程尚未释放,并且内存继续增长.

pthread_create(&线程,NULLcreatethread内存泄露,&线程_功能,NULL);而已. 参数2不会程结束后设置自动分离,并且在执行结束后不会使用pthread_join或pthread_detach释放线程空间!

Linux手册页已经解释了此问题:

createthread内存泄露_createthread创建线程_createthread传递参数

当可连接线程终止时,它的内存资源(线程描述符和堆栈)不会释放,直到另一个线程对其执行pthread_join为止. 因此,必须为创建的每个可连接线程调用一次pthread_join,以避免内存泄漏.

也就是说,如果在执行线程后未连接线程,则不会释放线程的资源,并且会发生内存泄漏!

解决方案:

createthread创建线程_createthread内存泄露_createthread传递参数

在创建线程之前设置PTHREAD_CREATE_DETACHED属性

pthread_attr_tattr;

pthread_tthread;

createthread传递参数_createthread创建线程_createthread内存泄露

thread_attr_init(&attr);

pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);

pthread_create(&线程,&attr和&thread_function,NULL);

createthread创建线程_createthread内存泄露_createthread传递参数

pthread_attr_destroy(&attr);

这将程返回/ pthread_exit之后释放内存.

实用的valgrind检查将提示未释放pthread_create的问题. 只有在长期运行中缓慢积累内存后,这种问题才会暴露出来.

不能直接设置属性值. 您必须使用相关功能进行操作. 初始化的函数是pthread_attr_init. 必须在pthread_create函数之前调用此函数. 属性对象主要包括是否绑定,是否分开,堆栈地址,堆栈大小,优先级. 默认属性是未绑定,未分离,默认1M堆栈以及与父进程相同的优先级.

线程的分离状态确定线程如何终止自身. 在上面的示例中,我们使用了线程的默认属性,即非分离状态. 在这种情况下,原始线程等待创建的线程结束. 仅当pthread_join()函数返回时createthread内存泄露,创建的线程才会终止,并且可以释放该线程占用的系统资源. 分离线程不是这种情况. 没有其他线程等待它. 完成运行后,线程终止,系统资源立即释放. 程序员应根据自己的需要选择适当的分离状态. 设置线程分离状态的函数是pthread_attr_setdetachstate(pthread_attr_t * attr,int detachstate). 第二个参数是可选的PTHREAD_CREATE_DETACHED(分离的线程)和PTHREAD _CREATE_JOINABLE(非分离的线程).


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-154741-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...