为什么无法创建堆栈大小小于默认大小的线程



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

        # 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.

最新更新