PTHREAD(3)

名称
pthread - POSIX スレッド関数

書式
#include <pthread.h>

解説
POSIX スレッドは、プロセス内でスレッド (thread) と呼ばれる 制御の複数のフローを要求するアプリケーションをサポートする関数群です。 マルチスレッドは、プログラムのパフォーマンスを改善するために使用されます。

このセクションでは、 POSIX スレッド関数の概要について以下のグループに分けて説明します。

•   スレッドルーチン

•   属性オブジェクトルーチン

•   mutex ルーチン

•   条件変数ルーチン

•   読取り/書込みロックルーチン

•   スレッド固有コンテキストルーチン

•   クリーンアップルーチン

スレッドルーチン

    int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg) 新しい実行するスレッドを作成します。

    int pthread_detach(pthread_t thread) スレッドに削除のための印を付けます。

    int pthread_equal(pthread_t t1, pthread_t t2) 2 つのスレッドの ID を比較します。

    void pthread_exit(void *value_ptr) 呼び出しているスレッドを終了します。

    int pthread_join(pthread_t thread, void **value_ptr) 呼び出しているスレッドが、指定したスレッドの終了を待つようにします。

    int pthread_cancel(pthread_t thread) スレッドの実行を取り消します。

    int pthread_once(pthread_once_t *once_control, void (*init_routine)(void)) 初期化ルーチンを一度だけ呼び出します。

    pthread_t pthread_self(void) 呼び出しているスレッドの ID を返します。

属性オブジェクトルーチン

    int pthread_attr_destroy(pthread_attr_t *attr) スレッドの属性オブジェクトを破壊します。

    int pthread_attr_getinheritsched(const pthread_attr_t *attr, int *inheritsched) スレッドの属性オブジェクトから継承スケジューリング属性を取得します。

    int pthread_attr_getschedparam(const pthread_attr_t *attr, struct sched_param *param) スレッドの属性オブジェクトからスケジューリングパラメータ属性を取得します。

    int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy) スレッドの属性オブジェクトからスケジューリング方針属性を取得します。

    int pthread_attr_getscope(const pthread_attr_t *attr, int *contentionscope) スレッドの属性オブジェクトからコンテンション範囲属性を取得します。

    int pthread_attr_getstacksize(const pthread_attr_t *attr, size_t *stacksize) スレッドの属性オブジェクトからスタックサイズ属性を取得します。

    int pthread_attr_getstackaddr(const pthread_attr_t *attr, void **stackaddr) スレッドの属性オブジェクトからスタックアドレス属性を取得します。

    int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *detachstate) スレッドの属性オブジェクトからデタッチ状態属性を取得します。

    int pthread_attr_init(pthread_attr_t *attr) スレッド属性オブジェクトをデフォルト値で初期化します。

    int pthread_attr_setinheritsched(pthread_attr_t *attr, int inheritsched) スレッドの属性オブジェクトに継承スケジューリング属性を設定します。

    int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param) スレッドの属性オブジェクトにスケジューリングパラメータ属性を設定します。

    int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy) スレッドの属性オブジェクトにスケジューリング方針属性を設定します。

    int pthread_attr_setscope(pthread_attr_t *attr, int contentionscope) スレッドの属性オブジェクトにコンテンション範囲属性を設定します。

    int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize) スレッドの属性オブジェクトにスタックサイズ属性を設定します。

    int pthread_attr_setstackaddr(pthread_attr_t *attr, void *stackaddr) スレッドの属性オブジェクトにスタックアドレス属性を設定します。

    int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate) スレッドの属性オブジェクトにデタッチ状態属性を設定します。

mutex ルーチン

    int pthread_mutexattr_destroy(pthread_mutexattr_t *attr) mutex の属性オブジェクトを破壊します。

    int pthread_mutexattr_init(pthread_mutexattr_t *attr) mutex の属性オブジェクトをデフォルト値で初期化します。

    int pthread_mutex_destroy(pthread_mutex_t *mutex) mutex を破壊します。

    int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr) mutex を指定された属性で初期化します。

    int pthread_mutex_lock(pthread_mutex_t *mutex) mutex をロックして、mutex が利用可能になるまでブロックします。

    int pthread_mutex_trylock(pthread_mutex_t *mutex) mutex をロックしようとしますが、mutex が現在のスレッドを含めた 別のスレッドによってロックされている場合には、ブロックしません。

    int pthread_mutex_unlock(pthread_mutex_t *mutex) mutex のロックを解除します。

条件変数ルーチン

    int pthread_condattr_init(pthread_condattr_t *attr) 条件変数の属性オブジェクトをデフォルト値で初期化します。

    int pthread_condattr_destroy(pthread_condattr_t *attr) 条件変数の属性オブジェクトを破壊します。

    int pthread_cond_broadcast(pthread_cond_t *cond) 指定された条件変数で現在ブロックされている 全てのスレッドのブロックを解除します。

    int pthread_cond_destroy(pthread_cond_t *cond) 条件変数を破壊します。

    int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr) 条件変数を指定された属性で初期化します。

    int pthread_cond_signal(pthread_cond_t *cond) 指定された条件変数で現在ブロックされている 少なくとも 1 つのスレッドのブロックを解除します。

    int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime) 条件を指定された時間内で待機し、指定された mutex をロックします。

    int pthread_cond_wait(pthread_cond_t *, pthread_mutex_t *mutex) 条件を待機し、指定された mutex をロックします。

読取り/書込みロックルーチン

    int pthread_rwlock_destroy(pthread_rwlock_t *lock) 読取り/書込みロックオブジェクトを破壊します。

    int pthread_rwlock_init(pthread_rwlock_t *lock, const pthread_rwlockattr_t *attr) 読取り/書込みロックオブジェクトを初期化します。

    int pthread_rwlock_rdlock(pthread_rwlock_t *lock) 読取り/書込みロックを読取り用にロックし、 ロックを取得できるようになるまでブロックします。

    int pthread_rwlock_tryrdlock(pthread_rwlock_t *lock) 読取り/書込みロックを読取り用にロックしようとしますが、 ロックできない場合にはブロックしません。

    int pthread_rwlock_trywrlock(pthread_rwlock_t *lock) 読取り/書込みロックを書込み用にロックしようとしますが、 ロックできない場合にはブロックしません。

    int pthread_rwlock_unlock(pthread_rwlock_t *lock) 読取り/書込みロックのロックを解除します。

    int pthread_rwlock_wrlock(pthread_rwlock_t *lock) 読取り/書込みロックを書込み用にロックし、 ロックを取得できるようになるまでブロックします。

    int pthread_rwlockattr_destroy(pthread_rwlockattr_t *attr) 読取り/書込みロックの属性オブジェクトを破壊します。

    int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *attr, int *pshared) 読取り/書込みロックの属性オブジェクトのプロセス共有設定を取得します。

    int pthread_rwlockattr_init(pthread_rwlockattr_t *attr) 読取り/書込みロックの属性オブジェクトを初期化します。

    int pthread_rwlockattr_setpshared(pthread_rwlockattr_t *attr, int pshared) 読取り/書込みロックの属性オブジェクトのプロセス共有設定を設定します。

スレッド固有コンテキストルーチン

    int pthread_key_create(pthread_key_t *key, void (*routine)(void *)) スレッド固有のデータキーを作成します。

    int pthread_key_delete(pthread_key_t key) スレッド固有のデータキーを削除します。

    void * pthread_getspecific(pthread_key_t key) 指定されたキーのスレッド固有の値を取得します。

    int pthread_setspecific(pthread_key_t key, const void *value_ptr) 指定されたキーのスレッド固有の値を設定します。

クリーンアップルーチン

    void pthread_cleanup_pop(int execute) 呼び出しているスレッドの取り消しクリーンアップスタックの最初のルーチンを 削除し、オプションでそのルーチンを実行します。

    void pthread_cleanup_push(void (*routine)(void *), void *routine_arg) 呼び出しているスレッドの取り消しスタックに指定された取り消しクリーンアップ ハンドラを積みます。

インストレーション
現在の FreeBSD POSIX スレッドの実装は、スレッドセーフな libc 関数とスレッド関数を含む ライブラリ libc_r で構築されています。このライブラリはスレッドアプリケーションの libc を置き換えます。

デフォルトでは、 libc_r は 'make world' の一部として構築されます。この構築を無効にするには、 make(1) に '-DNOLIBC_R' オプションを与えなければなりません。

スレッド化されたプロセスを簡単にリンクするために、gcc に FreeBSD 固有のオプションが追加されています。 gcc -pthread はスレッド化されたプロセスに libc に代って libc_r をリンクします。

関連項目
pthread_create(3), pthread_detach(3), pthread_equal(3), pthread_exit(3), pthread_join(3), pthread_once(3), pthread_self(3), pthread_mutex_destroy(3), pthread_mutex_init(3), pthread_mutex_lock(3), pthread_mutex_trylock(3), pthread_mutex_unlock(3), pthread_cond_broadcast(3), pthread_cond_destroy(3), pthread_cond_init(3), pthread_cond_signal(3), pthread_cond_timedwait(3), pthread_cond_wait(3), pthread_rwlock_destroy(3), pthread_rwlock_init(3), pthread_rwlock_rdlock(3), pthread_rwlock_unlock(3), pthread_rwlock_wrlock(3), pthread_rwlockattr_destroy(3), pthread_rwlockattr_getpshared(3), pthread_rwlockattr_init(3), pthread_rwlockattr_setpshared(3), pthread_key_delete(3), pthread_getspecific(3), pthread_setspecific(3), pthread_cleanup_pop(3), pthread_cleanup_push(3)

規格
pthread_ 接頭語が付き、 _np 接尾語または pthread_rwlock 接頭語が付いていない libc_r の関数は、 p1003.1-96 に適合しています。

pthread_ 接頭語および _np 接尾語が付いた libc_r の関数は、POSIX スレッドへの非ポータブル拡張です。

pthread_rwlock 接頭語が付いた libc_r の関数は、 susv2 の The Open Group によって作成された拡張です。