为什么pthread_create()会失败,只有2个线程处于活动状态?

我在第一次尝试使用C中的线程时遇到了一些麻烦。我正在尝试(现在)编写一个非常简单的服务器程序,该程序接受套接字连接并启动一个新线程来处理它。 它似乎工作正常,除了它只会在pthread_create()失败并使用EAGAIN代码之前创建大约300个线程(303,有时是304),这意味着:

“系统缺少创建另一个线程所需的资源,或者会超出系统对进程中线程总数的限制{PTHREAD_THREADS_MAX}。”

不是 303个线程同时 – 每个线程退出,由gdb确认。 每次调用进程请求函数时,都会运行两个线程。

所以它意味着“系统缺乏必要的资源”。 我的问题是(而且可能有点愚蠢) – 这些资源是什么? 据推测,这是我程序中的内存泄漏(当然可能,甚至可能),但我认为即使如此,考虑到程序的其余部分很少,它可以管理超过300个。

我怎样才能知道我的程序可用多少内存来确认它已经用完了? 有足够的内存和交换免费,所以可能是操作系统(Linux)强加的人为限制。

谢谢

如果您没有使用属性PTHREAD_CREATE_DETACHED创建线程(或使用pthread_detach()分离它们,则可能需要在每个创建的线程退出后调用pthread_join()以释放与之关联的资源。

可能有点矫枉过正(?)但是Valgrind可以帮助你找到Linux中的memleaks。

您可以发布一些代码片段吗? 最好是分配/释放内存/套接字的部分以及创建线程的位置。