Указание размера стека потока в pthreads - PullRequest
1 голос
/ 24 марта 2011

Я хочу увеличить размер стека потока, созданного с помощью pthread_create ().Кажется, что путь может быть

int pthread_attr_setstack( pthread_attr_t *attr,
                           void *stackaddr,
                           size_t stacksize ); 

из pthread.h.

Однако, согласно многочисленным онлайн ссылкам ,

Stackaddr должен быть выровнен соответствующим образом для использования в качестве стека;например, pthread_attr_setstack () может завершиться ошибкой с [EINVAL], если (stackaddr & 0x7) не равно 0.

Мой вопрос: может ли кто-нибудь привести пример того, как выполнить выравнивание?Это (выравнивание) платформа или реализация зависит?

Заранее спасибо

Ответы [ 2 ]

12 голосов
/ 24 марта 2011

Никогда использовать pthread_attr_setstack. У него много фатальных недостатков, худшим из которых является то, что невозможно когда-либо освободить или повторно использовать стек после того, как с его помощью был создан поток. (POSIX явно заявляет, что любая попытка сделать это приводит к неопределенному поведению.)

POSIX предоставляет гораздо лучшую функцию, pthread_attr_setstacksize, которая позволяет запрашивать необходимый вам размер стека, но оставляет за реализацию ответственность за выделение и освобождение стека.

1 голос
/ 24 марта 2011

Загляните в posix_memalign().

Он выделит блок памяти запрошенного выравнивания и размера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...