Установить размер стека по умолчанию для будущих потоков QThreadPool и / или вызовов pthread_create

Я использую QtConcurrent / QThreadPool, и он создает потоки с размером стека, который слишком мал в Mac OS X 10.8 (512 КБ), но отлично подходит для CentOS 5.9 (10 МБ).

Я надеюсь, что есть обходной путь, при котором я могу установить некоторые параметры по умолчанию для размера стека новых потоков. Я забочусь только о 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, внутри процесса. Если атрибут равен NULL,
используются атрибуты по умолчанию
. так далее…

Я знаю, как получить значение по умолчанию:

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

Но я не нашел способ установить значение по умолчанию — только установить размер, передав pthread_attr_t в pthread_create,

Есть ли способ установить значение по умолчанию?

Существует ли какая-либо переменная окружения или другие средства для влияния на значение по умолчанию?

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 и аналогичные для Дарвина

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]