LINUX多线程中的释放问题pthread_detach

今天同事让帮忙修改播放dvb信号时,自动解码音视频pid的功能。结果之前用测试程序一直成功的解析线程,在加入到项目代码以后,创建线程大概5次时,再次创建线程就会失败,从网上了解到,可是能线程的资源释放问题。

在linux中,pthread有两种状态joinable状态和unjoinable状,一般创建线程后,线程都是属于joinable状态,如果一个线程结束运行但没有被join,还有一部分资源没有被回收,所以创建线程者应该调用pthread_join来等待线程运行结束,并可得到线程的退出代码,回收其资源。

假如处于unjoinable状态,则线程会在退出或者pthread_exit时自动释放其资源。

因此当遇到多次操作后,线程无法创建时,其原因很可能是资源释放问题引起的。解决:

1、创建线程后,添加pthread_join,用于资源释放。

2、用函数pthread_detach,将线程状态改为unjoinable。可以再线程开始处,执行pthread_detach(pthread_self()),这样问题就解决了。个人比较看好这种。

ps:线程的堆栈以及资源总量大约为8K多

你可能感兴趣的:(C语言编程,Linux系统)