0

我正在使用 QtConcurrent/QThreadPool,它正在创建堆栈大小的线程,在 Mac OS X 10.8 (512kB) 上太小,但在 CentOS 5.9 (10MB) 上很好。

我希望有一种解决方法,我可以为新线程的堆栈大小设置一些进程范围的默认值。我只关心类似 POSIX 的系统(Mac 和 Linux),暂时不关心 Windows。

我的问题是如何在运行程序之前从程序内部或通过环境变量或其他方式为新的 QThreadPool 线程设置默认堆栈大小?

通过为创建的线程设置默认值来实现效果的答案pthread_create也将很有用。


我正在尝试解决这个问题:

我的预感是 Qt 在后台使用 pthreads,如果我可以更改 pthreads 的默认堆栈大小,我的问题可能会得到解决。

pthread 文档说:

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                   void *(*start_routine)(void*), void *arg);

描述

pthread_create() 函数用于在进程中创建一个新线程,其属性由 attr 指定。如果 attr 为 NULL,则使用默认属性。ETC...

我知道如何获取默认值:

   size_t stacksize;
   pthread_attr_t attr;
   pthread_attr_init(&attr);
   pthread_attr_getstacksize (&attr, &stacksize);

但我还没有找到设置默认值的方法——只能通过传递 apthread_attr_t来设置大小pthread_create

有没有办法设置默认值?

是否有一些环境变量或其他方式来影响默认值?

4

1 回答 1

0

运行此代码以扩展进程堆栈大小。

对于 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(2) - 适用于 Linux 的 Linux 手册页以及适用于 Darwin 的类似页面

于 2013-07-24T20:09:27.497 回答