我正在尝试在UNIX计算机上找到每个进程的最大线程数,并编写下面的代码以使用sysconf:
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
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数量是多少? 谢谢
P.S。我在Solaris和Linux上尝试过它并得到了相同的结果。但HPUX确实返回8000!
答案 0 :(得分:2)
根据我在Mac OSX 10.7.X上的sysconf
手册:
如果对sysconf()的调用不成功,则返回-1并正确设置errno。否则,如果变量与不受支持的功能相关联,则返回-1并且不修改errno。否则,返回当前变量值。
在linux下它是不同的:
如果name无效,则返回-1,并将errno设置为EINVAL。否则,返回的值是系统资源的值,并且不会更改errno。对于选项,如果查询选项可用,则返回正值;如果不可用,则返回-1。在限制的情况下,-1表示没有明确的限制。
所以看起来_SC_THREAD_THREADS_MAX
不是该架构上的有效sysconfig变量,也可能没有限制。或许在其他架构上有-1
的另一个定义。您必须查看您尝试开始工作的每个架构的手册。
如果_SC_THREAD_THREADS_MAX
无效,那么您可能想要尝试进程而不是线程。也许最大进程设置也意味着最大线程。
答案 1 :(得分:2)