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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐