本文主要是介绍linux C语言 pthread多线程11错误 卡死,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
pthread新手坑,跟着网上直接写,pthread_create然后就让函数跑,跑完了直接在函数里面return。这个流程,小测试,一点毛病都没有,跑得贼溜。
但是客户拿去压测七天后,出现卡死的现象。分析后,发现printf内容出来了,但是thread的httppost数据没有发到服务器,怀疑是线程问题。
开始查资料以为调用return返回有问题,还特意去查了pthread_exit,甚至问了少头发大佬。说是return是在线程创建函数直接返回,而pthread_exit是可以在任何子函数中直接线程返回到调用,那这就不是引起问题的原因。
再查,查到一个资源回收的问题。贫瘠的C语言啊,这样开线程,可以跑,但是用完不会回收,就那样僵死在那里,资源占用着。等线程表满了,再新建线程,就直接撂挑子返回11了。为此还特意写了demo测试。
管杀不管埋的操作,创建了32753个线程后,再创建,就直接返回11了。
然后在pthread_create后面增加了pthread_detach调用,测试就不一样了,线程数量级再多两个都没问题,然后可以手动停止测试了。
做事还是要做全套,调用流程要走全啊。
pthread_create-》pthread_detach(pthread_join)-》pthread_exit
这篇关于linux C语言 pthread多线程11错误 卡死的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!