pthread_detach() - スレッドの切り離し

標準

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

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

両方

POSIX(ON)

形式

#define _OPEN_THREADS
#include <pthread.h>

int pthread_detach(pthread_t *thread);
SUSV3:
#define _UNIX03_THREADS 
#include <pthread.h>
int pthread_detach(pthread_t thread);

機能説明

スレッド ID が、位置 thread に入っているスレッドのストレージは、そのスレッドの終了時にレクラメーション処理できます。このストレージは、スレッドが切り離されたかどうかに関係なく、プロセスの終了時にレクラメーション処理され、そのストレージには thread の戻り値用のストレージが含まれる場合があります。thread が終了していない場合、そのスレッドは pthread_detach() では終了しません。

pthread_t は、スレッドを一意的に識別する場合に使用される データ型です。これは pthread_create() によって戻され、スレッド ID を必要とする アプリケーションで使用されます。

戻り値

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

正常に実行されなかった場合、pthread_detach() は -1 を戻して、errno を次のいずれかの 値に設定します。
エラー・コード
説明
EINVAL
thread によって指定された値は無効です。
ESRCH
thread が指定した値は、既に切り離されたスレッドを指しています。

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

CELEBP28
⁄* CELEBP28 *⁄
#define _OPEN_SYS
#define _OPEN_THREADS
#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>

void *thread(void *arg) {
  char *ret;
  printf("thread() entered with argument '%s'¥n", arg);
  if ((ret = (char*) malloc(20)) == NULL) {
    perror("malloc() error");
    exit(2);
  }
  strcpy(ret, "This is a test");
  pthread_exit(ret);
}

main() {
  pthread_t thid;
  void *ret;

  if (pthread_create(&thid, NULL, thread, "thread 1") != 0) {
    perror("pthread_create() error");
    exit(1);
  }

  if (pthread_join_d4_np(thid, &ret) != 0) {
    perror("pthread_create() error");
    exit(3);
  }

  printf("thread exited with '%s'¥n", ret);

  if (pthread_detach(&thid) != 0) {
    perror("pthread_detach() error");
    exit(4);
  }

}
出力:
thread() entered with argument 'thread 1'
thread exited with 'This is a test'

関連情報