我试图在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 systemn"); exit(1); } if (maxThreads == -1) { printf("errno: %dn", errno); exit(1); } printf ("max num threads per process: %ldn", 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宏。
信息 +信息
以上就是c/c++开发分享每个进程的最大线程数 – sysconf(_SC_THREAD_THREADS_MAX)失败相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/541836.html