NPTL Default Stack Size Problem

Posted by eyazici on Stack Overflow See other posts from Stack Overflow or by eyazici
Published on 2009-12-04T06:12:53Z Indexed on 2010/05/15 17:44 UTC
Read the original article Hit count: 539

Hello,

I am developing a multithread modular application using C programming language and NPTL 2.6. For each plugin, a POSIX thread is created. The problem is each thread has its own stack area, since default stack size depends on user's choice, this may results in huge memory consumption in some cases.

To prevent unnecessary memory usage I used something similar to this to change stack size before creating each thread:

pthread_attr_t attr;
pthread_attr_init (&attr);
pthread_attr_getstacksize(&attr, &st1);
if(pthread_attr_setstacksize (&attr, MODULE_THREAD_SIZE) != 0) perror("Stack ERR");
pthread_attr_getstacksize(&attr, &st2); 
printf("OLD:%d, NEW:%d - MIN: %d\n", st1, st2, PTHREAD_STACK_MIN);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
/* "this" is static data structure that stores plugin related data */
pthread_create(&this->runner, &attr, (void *)(void *)this->run, NULL);

EDIT I: pthread_create() section added.

This did not work work as I expected, the stack size reported by pthread_attr_getstacksize() is changed but total memory usage of the application (from ps/top/pmap output) did not changed:

OLD:10485760, NEW:65536 - MIN: 16384

When I use ulimit -s MY_STACK_SIZE_LIMIT before starting application I achieve the expected result.

My questions are:

1-) Is there any portable(between UNIX variants) way to change (default)thread stack size after starting application(before creating thread of course)?

2-) Is it possible to use same stack area for every thread?

3-) Is it possible completely disable stack for threads without much pain?

© Stack Overflow or respective owner

Related posts about nptl

Related posts about pthreads