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

また、私がうまくやることができるstacksizeよりも大きくしようとすると、注意してください。default size

4

1 に答える 1

4

10 バイトのスタック サイズを使用できると期待するのはおかしいです。

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 に答える