每个进程的最大线程数 – sysconf(_SC_THREAD_THREADS_MAX)失败

我试图在UNIX机器上找到每个进程的最大线程数,并编写下面的代码以使用sysconf:

#include  #include  #include  #include  #include  int main() { errno = 0; long maxThreads = sysconf(_SC_THREAD_THREADS_MAX); if (maxThreads == -1 && errno == 0) { printf("the variable corresponding to _SC_THREAD_THREADS_MAX " "is associated with functionality that is not " "supported by the system\n"); exit(1); } if (maxThreads == -1) { printf("errno: %d\n", errno); exit(1); } printf ("max num threads per process: %ld\n", maxThreads); exit(0); } 

不幸的是,sysconf()返回-1而不更改errno! 有谁知道如何解决这个问题,最终每个进程的最大Pthread数量是多少? 谢谢

PS我在Solaris和Linux上尝试过它并得到了相同的结果。 但HPUX确实返回了8000!

根据我的Mac OSX 10.7.X上的sysconf手册:

如果对sysconf()的调用不成功,则返回-1并正确设置errno。 否则,如果变量与不受支持的function相关联,则返回-1并且不修改errno。 否则,返回当前变量值。

在linux下它是不同的:

如果name无效,则返回-1,并将errno设置为EINVAL。 否则,返回的值是系统资源的值,并且不会更改errno。 对于选项,如果查询选项可用,则返回正值;如果不可用,则返回-1。 在限制的情况下,-1表示没有明确的限制。

所以看起来_SC_THREAD_THREADS_MAX不是该体系结构上的有效sysconfig变量,也可能没有限制。 或者也许在其他架构上有-1另一个定义。 您必须查看您尝试开始工作的每个架构的手册。

如果_SC_THREAD_THREADS_MAX无效,那么您可能希望尝试进程而不是线程。 也许最大进程设置也意味着最大线程。

如果没有线程限制,则该函数返回-1。

POSIX标准将PTHREAD_THREAD_MAX称为系统对进程中线程总数的限制。 在RHEL4和SLES9上,此宏实际上是为LinuxThreads定义的。 从SLES 10开始,不再支持LinuxThreads。 Linux上的pthread的新实现,Native POSIX线程库(NPTL),除了实际的资源可用性之外,对可以创建的线程数没有限制。 因此,SLES 10系统头文件中不再定义PTHREAD_THREAD_MAX宏。

信息 +信息