今天同事让帮忙修改播放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多