POSIXスレッド

POSIXスレッド (pthread) は、POSIX (Portable Operating System Interface) によって定められたスレッド・インタフェースです。Unixにおいてマルチスレッドを扱う場合、各Unix固有の方法より、POSIXスレッドの方が移植性が高くなります。

スレッドの終了

POSIXスレッドを終了させるには、以下の3種類の方法がある。

ライブラリ関数

ライブラリ関数
ライブラリ関数 説明
pthread_create 新しいスレッドを作成する。
pthread_join スレッドの終了を待つ。
pthread_detach スレッドを切り離す。
pthread_exit 呼び出しスレッドを終了させる。
pthread_cancel スレッドに取り消し要求を送信する。

pthread_create

新しいスレッドを作成する。

正常に終了すると、戻り値として0を返す。それ以外の戻り値は、エラーが発生したことを示す。

#include <pthread.h>

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
thread
生成されたスレッドの識別子を格納する領域へのポインタ
attr
引数 attr にはスレッドの属性を指定する。属性を初期化するには、pthread_attr_init 関数を使用します。NULLを指定すると、デフォルトの属性が適用される。
start_routine
新しいスレッドを実行する関数へのポインタ
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>

void func(void *arg) {
  printf("thread %s\n", (char *)arg);
  sleep(3);
}

int main(int argc, char *argv[]) {
  pthread_t pthread;
  char arg[] = "1";

  printf("create thread\n");
  if (pthread_create(&pthread, NULL, (void *)func, arg) == 0) {
    pthread_join(pthread, NULL);
    printf("thread terminates\n");
  }
}

pthread_join

スレッドの終了を待つ。切り離していないスレッドのみ有効である。

正常に終了すると、戻り値として0を返す。それ以外の戻り値は、エラーが発生したことを示す。

#include <pthread.h>

int pthread_join(pthread_t thread, void **retval);
thread
スレッドの識別子
retval
スレッドの終了状態を格納する領域へのポインタ。終了状態を取得する必要が無いときは、NULLを指定する。

pthread_detach

スレッドを切り離す。

正常に終了すると、戻り値として0を返す。それ以外の戻り値は、エラーが発生したことを示す。

#include <pthread.h>

int pthread_detach(pthread_t thread);
thread
レッドの識別子

pthread_exit

呼び出しスレッドを終了させる。

#include <pthread.h>

void pthread_exit(void *retvel);
retvel
スレッドの終了状態を格納した領域へのポインタ。終了状態を戻す必要が無いときはNULLを指定する。

pthread_cancel

スレッドに取り消し要求を送信する。

正常終了時は戻り値として0を返す。それ以外の戻り値は、エラーが発生したことを示す。

#include <pthread.h>

int pthread_cancel(pthread_t thread);
thread
スレッドの識別子