pthread_attr_getdetachstate() - 切り離し状態属性の取得

標準

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

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

両方

POSIX(ON)

形式

#define _OPEN_THREADS
#include <pthread.h>

int pthread_attr_getdetachstate(pthread_attr_t *attr);
SUSV3:
#define _UNIX03_THREADS 
#include <pthread.h>
int pthread_attr_getdetachstate(const pthread_attr_t *attr,
                                int *detachstate);

機能説明

pthread_attr_init() で作成されるスレッド属性オブジェクト attr の detachstate 属性の現行値を戻します。detachstate 属性値は次のとおりです。
0
切り離し解除。切り離し解除スレッドは、終了後にそのリソースを保持します。
1
切り離し済み。切り離されたスレッドでは、そのリソースは終了時にシステムによって自動的に 解放されます。したがって、pthread_join() を使用してスレッドの終了状況を 取得することはできません (あるいはスレッドの終了を待機 することはできません)。

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

戻り値

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

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

設定される errno 値はありません。 perror() または strerror() を使用して、エラーの原因を判別してください。

Single UNIX Specification、バージョン 3 の特殊な動作: 正常に実行されなかった場合、pthread_attr_getdetachstate() はエラーを示すエラー番号を戻します。

CELEBP07

⁄* CELEBP07 *⁄                                   
#define _OPEN_THREADS                                                           
#include <stdio.h>                                                              
#include <pthread.h>                                                            
                                                                                
int main()                                                                      
{                                                                               
   pthread_attr_t attr;                                                         
   char           typ[12];                                                      
                                                                                
   if (pthread_attr_init(&attr) == -1) {                                        
      perror("error in pthread_attr_init");                                     
      exit(1);                                                                  
   }                                                                            
                                                                                
   switch(pthread_attr_getdetachstate(&attr)) {                                 
      default:                                                                  
         perror("error in pthread_attr_getdetachstate()");                      
         exit(2);                                                               
      case 0:                                                                   
         strcpy(typ, "undetached");                                             
         break;                                                                 
      case 1:                                                                   
         strcpy(typ, "detached");                                               
   }                                                                            
   printf("The detach state is %s.¥n", typ);                                    
                                                                                
   if (pthread_attr_destroy(&attr) == -1) {                                     
      perror("error in pthread_attr_destroy");                                  
      exit(2);                                                                  
   }                                                                            
   exit(0);                                                                     
}                                                                               

CELEBP61

⁄* CELEBP61 *⁄                                   
⁄* Example using SUSv3 pthread_attr_getdetachstate() interface *⁄ 

#define _UNIX03_THREADS 1                                                          
#include <stdio.h>                                                              
#include <stdlib.h>
#include <string.h>
#include <pthread.h>                                                            
#include <errno.h>                                                            

                                                                                
int main(void)                                                                      
{                                                                               
  pthread_attr_t attr;                                                         
  int            rc, newstate, foundstate; 
  char           state[12];
                                                                                
  if (pthread_attr_init(&attr) == -1) {                                        
     perror("error in pthread_attr_init");                                     
     exit(1);                                                                  
  }                                                                            

  newstate = PTHREAD_CREATE_DETACHED; 
  pthread_attr_setdetachstate(&attr, newstate);
                                                                                
  rc = pthread_attr_getdetachstate(&attr,&foundstate);
  switch(foundstate) {
      case PTHREAD_CREATE_JOINABLE:
         strcpy(state,"joinable");
         break;
      case PTHREAD_CREATE_DETACHED:
         strcpy(state,"detached");
         break;
      default:
         printf("pthread_attr_getdetachstate returned: %d¥n", rc); 
         printf("Error: %d, Errno_Jr: %08x¥n", errno, __errno2());
         exit(2);
  }   

  printf("Threads created with this attribute object are %s.¥n",state);

  if (pthread_attr_destroy(&attr) == -1) {                                     
     perror("error in pthread_attr_destroy");                                  
     exit(3);                                                                  
  }                                                                            

  exit(0);                                                                     
}                                                                               

関連情報