|PTHREAD_ATTR_SETSTACK(3)||Linux Programmer's Manual||PTHREAD_ATTR_SETSTACK(3)|
int pthread_attr_setstack(pthread_attr_t *attr, void *stackaddr, size_t stacksize); int pthread_attr_getstack(const pthread_attr_t *attr, void **stackaddr, size_t *stacksize);
Compile and link with -pthread.
stackaddr should point to the lowest addressable byte of a buffer of stacksize bytes that was allocated by the caller. The pages of the allocated buffer should be both readable and writable.
The pthread_attr_getstack() function returns the stack address and stack size attributes of the thread attributes object referred to by attr in the buffers pointed to by stackaddr and stacksize, respectively.
- stacksize is less than PTHREAD_STACK_MIN (16384) bytes. On some systems, this error may also occur if stackaddr or stackaddr + stacksize is not suitably aligned.
POSIX.1 also documents an EACCES error if the stack area described by stackaddr and stacksize is not both readable and writable by the caller.
|pthread_attr_setstack (), pthread_attr_getstack ()||Thread safety||MT-Safe|
When an application employs pthread_attr_setstack(), it takes over the responsibility of allocating the stack. Any guard size value that was set using pthread_attr_setguardsize(3) is ignored. If deemed necessary, it is the application's responsibility to allocate a guard area (one or more pages protected against reading and writing) to handle the possibility of stack overflow.
The address specified in stackaddr should be suitably aligned: for full portability, align it on a page boundary (sysconf(_SC_PAGESIZE)). posix_memalign(3) may be useful for allocation. Probably, stacksize should also be a multiple of the system page size.
If attr is used to create multiple threads, then the caller must change the stack address attribute between calls to pthread_create(3); otherwise, the threads will attempt to use the same memory area for their stacks, and chaos will ensue.