增加solaris上子线程的堆栈大小以用于pthreads

时间:2014-03-13 08:33:56

标签: c++ multithreading stack pthreads solaris

我正在尝试使用以下代码片段增加pthreads的堆栈大小:

 size_t newstacksz = 0xf000;
 void * arg = 0;
 int ret = pthread_attr_setstacksize(&attr, newstacksz);
 if (ret == -1) {
   std::cout << "Attempt to increase thread stack size failed, resorting to default" << endl;
   ret = pthread_attr_setstacksize(&attr, 0); // minimum allowable
 }
 pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_JOINABLE);
 pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);  // system-wide contention
 ret = pthread_create(&tid,&attr,thrfn,arg);
 pthread_attr_destroy(&attr);

如果我要创建多个工作线程,我可以估算每个线程的最大允许堆栈大小吗?

1 个答案:

答案 0 :(得分:1)

pthreads没有最大堆栈大小的概念。因此,没有办法让pthread为线程提供“允许的最大”堆栈大小。对于已知的一组线程,也无法向pthread请求建议的最大允许堆栈大小。

对于您的特定应用程序来说,最合适的(最大?)堆栈大小取决于所以很多东西:机器,操作系统,可用内存,预期负载,预期堆栈消耗等等,所以它真的没有奇怪pthreads不能告诉你。我也不能。

你不得不弄清楚自己适当的堆栈大小。