C++ 为将来的QThreadPool线程和/或pthread_create调用设置默认堆栈大小
我使用的是QtConcurrent/QThreadPool,它创建的线程堆栈大小在Mac OS X 10.8(512kB)上太小,但在CentOS 5.9(10MB)上却很好 我希望有一个解决方法,可以为新线程的堆栈大小设置一些进程范围的默认值。我只关心POSIX类系统(Mac和Linux),暂时不关心Windows 我的问题是在运行程序之前,如何从程序内部或通过环境变量或其他方式设置新QThreadPool线程的默认堆栈大小? 通过为C++ 为将来的QThreadPool线程和/或pthread_create调用设置默认堆栈大小,c++,c,pthreads,stack,qtconcurrent,C++,C,Pthreads,Stack,Qtconcurrent,我使用的是QtConcurrent/QThreadPool,它创建的线程堆栈大小在Mac OS X 10.8(512kB)上太小,但在CentOS 5.9(10MB)上却很好 我希望有一个解决方法,可以为新线程的堆栈大小设置一些进程范围的默认值。我只关心POSIX类系统(Mac和Linux),暂时不关心Windows 我的问题是在运行程序之前,如何从程序内部或通过环境变量或其他方式设置新QThreadPool线程的默认堆栈大小? 通过为pthread\u create创建的线程设置默认值来实现此
pthread\u create
创建的线程设置默认值来实现此效果的答案也很有用
在我试图解决这个问题的过程中: 我的直觉是,Qt正在幕后使用pthreads,如果我可以更改pthreads的默认堆栈大小,我的问题可能会得到解决 pthread文档说明: 描述 pthread_create()函数用于创建新线程,其中 由attr在进程内指定的属性如果attr为NULL,则 使用默认属性。等等 我知道如何获取默认值:
size_t stacksize;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_getstacksize (&attr, &stacksize);
但是我还没有找到一种设置默认值的方法-只是通过将pthread\u attr\u t
传递到pthread\u create
来设置大小
有没有办法设置默认值
是否有一些环境变量或其他方法影响默认值?运行此代码以扩展进程堆栈大小 对于Mac OS X和Linux:
#include <sys/resource.h>
#include <sys/types.h>
#include <sys/time.h>
...
rlimit limits;
getrlimit(RLIMIT_STACK, &limits);
limits.rlim_cur = <new process stack size (up to limits.rlim_max)>;
setrlimit(RLIMIT_STACK, &limits);
...
#包括
#包括
#包括
...
限制;
getrlimit(RLIMIT_堆栈和限制);
limits.rlim_cur=;
setrlimit(RLIMIT_堆栈和限制);
...
见和
对于Linux和类似的Darwin,我怀疑这取决于操作系统,即使它们都是POSIX系统。也就是说,您可以在Linux上以一种方式进行操作,在BSD上以另一种方式进行操作(OSX是BSD的衍生产品)。我还怀疑你不能在每个进程的基础上完成这项工作,只能在全球系统范围内完成。我目前的问题是,代码需要彻底检查,以避免使用QtConcurrent。如果你同时知道如何解决这个问题,那可能会有帮助。。。
#include <sys/resource.h>
#include <sys/types.h>
#include <sys/time.h>
...
rlimit limits;
getrlimit(RLIMIT_STACK, &limits);
limits.rlim_cur = <new process stack size (up to limits.rlim_max)>;
setrlimit(RLIMIT_STACK, &limits);
...