为什么不能创建stacksize小于默认大小的线程?

时间:2012-05-17 19:24:53

标签: c++ multithreading pthreads

我编写了一个小程序来创建线程并更改其默认堆栈大小,但在我的情况下。当我在更改属性后打印stacksize时,我仍然将stacksize显示为默认堆栈大小。

        # include<iostream>
        # include<pthread.h>
        # include<stdio.h>
        # define size 10
        using namespace std;
        pthread_attr_t attr;

        void* sum(void * threadid)
        {
          static int sum =0;
          sum=sum+5;
          long id=(long)threadid;
          size_t mystacksize;
          pthread_attr_getstacksize(&attr,&mystacksize);
          cout << " stack size  "<< mystacksize <<endl;
        }
        int main()
        {
         int rc;
         long t=0;
         pthread_t threads[5];  //number of different thread to br creatd
         size_t stacksize;
         pthread_attr_init(&attr);
         pthread_attr_getstacksize(&attr,&stacksize);   //gets the default stack size 
                                                        //allocated for thread
         cout <<" Default stack size is : " << stacksize <<endl; 
         stacksize=size;
         pthread_attr_setstacksize(&attr,stacksize);  //sets a new stacksize for thread
           for(t=0;t<5;t++)
            {
              rc=pthread_create(&threads[t],&attr,sum,(void*)t);
              if(rc)
              cout << "thread creation failed with id : " << t <<endl;
            }
         pthread_exit(NULL);
        return 0;
        }

输出是: -

           Default stack size is : 8388608
           stack size  : 8388608
           stack size  : 8388608
           stack size  : 8388608
           stack size  : 8388608
           stack size  : 8388608

另请注意,如果我尝试增加stacksize大于default size我已成功完成此操作。

1 个答案:

答案 0 :(得分:4)

期望能够使用十个字节的堆栈大小真是太疯狂了。

您是否阅读了pthread_attr_setstacksize手册页?您是否检查了调用pthread_attr_setstacksize的返回值?

在我的系统(GNU / Linux)上,手册页说:

   pthread_attr_setstacksize() can fail with the following error:

   EINVAL The stack size is less than PTHREAD_STACK_MIN (16384) bytes.