1

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

        # 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

另请注意,如果我尝试增加stacksizedefault size我成功的能力更大的值。

4

1 回答 1

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.
于 2012-05-17T19:38:32.213 回答