pthread_attr_setstacksize() - スタック・サイズ属性オブジェクトの設定

標準

標準/拡張機能 C/C++ 依存項目

POSIX.4a
Single UNIX Specification、バージョン 3

両方

POSIX(ON)

形式

#define _OPEN_THREADS
#include <pthread.h>

int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
SUSV3:
#define _UNIX03_THREADS
#include <pthread.h>

int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);

機能説明

スレッド属性オブジェクト attr の スタック・サイズ (バイト数) を設定します。stacksize は初期スタック・サイズです。他のスタック特性 (スタック 増分サイズなど) は、STACK64/THREADSTACK64 ランタイム・オプションから 継承されます。

スレッド属性オブジェクトを使用して、アプリケーションのスレッドの特性を 管理できます。これは、生成時にスレッドに使用される値の集合を定義します。スレッド属性オブジェクトを確立すると、各スレッドごとに特性を定義しないで、同じ一連の特性をもつ多数のスレッドを作成できます。複数のスレッド属性オブジェクトを定義できます。

使用上の注意

  1. XPLINK アプリケーションは 2 つのスタック、上位アドレス方向へと増加するスタックおよび下位アドレスの方向へと増加するスタックを使用します。「stacksize」は。下位アドレス方向へ増加するスタックを指します。
  2. Single UNIX Specification、バージョン・スレッド・サポートを使用している場合、31 ビットでの最小 stacksize は 4096 (4 K) で、64 ビットでは 1048576 (1M) です。 さらに、システムは等価のサイズの guardpage を割り振ります。指定された最大 stacksize はありません。スレッドの作成時にシステムに必要なストレージ以上のストレージを要求した場合、pthread_create() は失敗して EINVAL を戻します。

戻り値

正常に実行された場合、pthread_attr_setstacksize() は 0 を戻します。

正常に実行されなかった場合、pthread_attr_setstacksize() は -1 を戻します。

エラー・コード
説明
EINVAL
stacksize の値が PTHREAD_STACK_MIN より小さいか、または attr が指定した値が初期設定されたスレッド属性オブジェクトを指していません。

Single UNIX Specification、バージョン 3 の特殊な動作

正常に実行されなかった場合、pthread_attr_setstacksize() はエラーを示すエラー番号を戻します。

CELEBP12
⁄* CELEBP12 *⁄                                   
#define _OPEN_THREADS                                                           
#include <stdio.h>                                                              
#include <pthread.h>                                                            
                                                                                
void *thread1(void *arg)                                                        
{                                                                               
   printf("hello from the thread¥n");                                           
   pthread_exit(NULL);                                                          
}                                                                               
                                                                                
int main()                                                                      
{                                                                               
   int            rc, stat;                                                     
   size_t         s1;                                                           
   pthread_attr_t attr;                                                         
   pthread_t      thid;                                                         
                                                                                
   rc = pthread_attr_init(&attr);                                               
   if (rc == -1) {                                                              
      perror("error in pthread_attr_init");                                     
      exit(1);                                                                  
   }                                                                            
                                                                                
   s1 = 4096;                                                                   
   rc = pthread_attr_setstacksize(&attr, s1);                                   
   if (rc == -1) {                                                              
      perror("error in pthread_attr_setstacksize");                             
      exit(2);                                                                  
   }                                                                            
                                                                                
   rc = pthread_create(&thid, &attr, thread1, NULL);                            
   if (rc == -1) {                                                              
      perror("error in pthread_create");                                        
      exit(3);                                                                  
   }                                                                            
                                                                                
   rc = pthread_join(thid, (void *)&stat);                                      
   exit(0);                                                                     
}                                                                               

関連情報