创建多个线程后Pthread_create失败

时间:2011-04-30 20:28:49

标签: c++ c networking concurrency pthreads

我正在开发一个处理客户端连接的应用程序。我正在为每个请求生成一个线程,因为会有短任务。但是,在处理一定数量的连接后,我一直遇到问题。具体来说,在381个连接之后,pthread_create无法创建新线程。我知道如果应用程序资源耗尽,或者已经创建了超过PTHREAD_THREADS_MAX个线程,这可能会失败。

奇怪的是,当发生此错误时,前381个线程已经停止。我没有使用pthread_join来等待这些线程停止,我相信pthreads不要求我以某种方式“停止”线程,如果我错了就纠正我(至少manpage没有提到这个)。我想也许这可能是在同时生成多个线程时产生的,但是,我已经多次测试过它,并且每次第382个线程创建都失败了。

有谁知道会发生什么?任何帮助将不胜感激。

提前致谢。

1 个答案:

答案 0 :(得分:4)

如果不调用pthread_join或分离线程(通过调用pthread_detach或使用属性在分离状态下创建它),则终止线程使用的资源将永远不会被释放。这是你的问题。如果您不需要加入线程,请在创建它们后立即将其分离。