在pthreads中指定线程堆栈大小

时间:2011-03-24 16:02:02

标签: c++ c multithreading pthreads

我想增加通过pthread_create()创建的线程的堆栈大小。要走的路似乎是

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

来自pthread.h

但是,根据多个在线references

  

stackaddr应适当对齐以用作堆栈;例如,如果(stackaddr& 0x7)不为0,pthread_attr_setstack()可能会因[EINVAL]而失败。

我的问题:有人可以举例说明如何进行对齐吗?是(对齐)平台还是依赖于实现?

提前致谢

2 个答案:

答案 0 :(得分:12)

从不使用pthread_attr_setstack。它有很多致命的缺陷,其中最糟糕的是,在使用它创建一个线程之后,永远不会自由或重用堆栈。 (POSIX明确指出任何尝试都会导致未定义的行为。)

POSIX提供了一个更好的函数pthread_attr_setstacksize,它允许您请求所需的堆栈大小,但让实现负责分配和释放堆栈。

答案 1 :(得分:1)

查看posix_memalign()

它将分配所请求的对齐和大小的内存块。

相关问题