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

        # 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,则可以成功做到这一点。

最佳答案

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

您读过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.

10-01 13:56