Do not begin a line with single quote character. Submitted by: Kazuo Horikawa <k-horik@yk.rim.or.jp>
256 lines
11 KiB
Groff
256 lines
11 KiB
Groff
.\" Copyright (c) 1996 John Birrell <jb@cimlogic.com.au>.
|
|
.\" All rights reserved.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\" 3. All advertising materials mentioning features or use of this software
|
|
.\" must display the following acknowledgement:
|
|
.\" This product includes software developed by John Birrell.
|
|
.\" 4. Neither the name of the author nor the names of any co-contributors
|
|
.\" may be used to endorse or promote products derived from this software
|
|
.\" without specific prior written permission.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY JOHN BIRRELL AND CONTRIBUTORS ``AS IS'' AND
|
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
.\" SUCH DAMAGE.
|
|
.\"
|
|
.\" %Id: pthread.3,v 1.7 1998/09/12 13:53:58 alex Exp %
|
|
.\"
|
|
.\" jpman %Id$
|
|
.\"
|
|
.Dd September 10, 1998
|
|
.Dt PTHREAD 3
|
|
.Os BSD 4
|
|
.Sh 名称
|
|
.Nm pthread
|
|
.Nd POSIX スレッド関数
|
|
.Sh 解説
|
|
POSIX スレッドは、プロセスで制御の複数のフロー
|
|
(スレッド) を要求するアプリケーションをサポートする関数です。
|
|
マルチスレッドは、
|
|
プログラムのパフォーマンスを改善するために使用されます。
|
|
このセクションでは、
|
|
POSIX スレッド関数の概要について以下のグループに分けて説明します。
|
|
.Bl -bullet -offset indent
|
|
.It
|
|
スレッドルーチン
|
|
.It
|
|
属性オブジェクトルーチン
|
|
.It
|
|
Mutex ルーチン
|
|
.It
|
|
条件変数ルーチン
|
|
.It
|
|
読み書きロックルーチン
|
|
.It
|
|
スレッド固有コンテキストルーチン
|
|
.It
|
|
クリーンアップルーチン
|
|
.El
|
|
.Sh スレッドルーチン
|
|
.Bl -tag -width Er
|
|
.It int Fn pthread_create "pthread_t *thread" "const pthread_attr_t *attr" "void *(*start_routine)(void *)" "void *arg"
|
|
実行の新しいスレッドを作成します。
|
|
.It int Fn pthread_detach "pthread_t thread"
|
|
スレッドに削除マークを付けます。
|
|
.It int Fn pthread_equal "pthread_t t1" "pthread_t t2"
|
|
2 つのスレッド ID を比較します。
|
|
.It void Fn pthread_exit "void *value_ptr"
|
|
呼び出しスレッドを終了します。
|
|
.It int Fn pthread_join "pthread_t thread" "void **value_ptr"
|
|
呼び出しスレッドが、指定したスレッドの終了を待つようになりす。
|
|
.It int Fn pthread_once "pthread_once_t *once_control" "void (*init_routine)(void)"
|
|
初期化ルーチンを 1 回呼び出します。
|
|
.It pthread_t Fn pthread_self void
|
|
呼び出しスレッドのスレッド ID を戻します。
|
|
.El
|
|
.Sh 属性オブジェクトルーチン
|
|
.Bl -tag -width Er
|
|
.It int Fn pthread_attr_destroy "pthread_attr_t *attr"
|
|
スレッドの属性オブジェクトを破壊します。
|
|
.It int Fn pthread_attr_getinheritsched "pthread_attr_t *attr" "int *inheritsched"
|
|
スレッドの属性オブジェクトから継承スケジューリング属性を入手します。
|
|
.It int Fn pthread_attr_getschedparam "pthread_attr_t *attr" "struct sched_param *param"
|
|
スレッドの属性オブジェクトからスケジューリングパラメータ属性を入手します。
|
|
.It int Fn pthread_attr_getschedpolicy "pthread_attr_t *attr" "int *policy"
|
|
スレッドの属性オブジェクトからスケジューリング方針属性を入手します。
|
|
.It int Fn pthread_attr_getscope "pthread_attr_t *attr" "int *contentionscope"
|
|
スレッドの属性オブジェクトからコンテンション範囲属性を入手します。
|
|
.It int Fn pthread_attr_getstacksize "pthread_attr_t *attr" "size_t *stacksize"
|
|
スレッドの属性オブジェクトからスタックサイズ属性を入手します。
|
|
.It int Fn pthread_attr_getstackaddr "pthread_attr_t *attr" "void **stackaddr"
|
|
スレッドの属性オブジェクトからスタックアドレス属性を入手します。
|
|
.It int Fn pthread_attr_getdetachstate "pthread_attr_t *attr" "int *detachstate"
|
|
スレッドの属性オブジェクトから切り離し状態属性を入手します。
|
|
.It int Fn pthread_attr_init "pthread_attr_t *attr"
|
|
スレッドの属性オブジェクトをデフォルト値で初期化します。
|
|
.It int Fn pthread_attr_setinheritsched "pthread_attr_t *attr" "int inheritsched"
|
|
スレッドの属性オブジェクトで継承スケジューリング属性を設定します。
|
|
.It int Fn pthread_attr_setschedparam "pthread_attr_t *attr" "struct sched_param *param"
|
|
スレッドの属性オブジェクトでスケジューリングパラメータ属性を設定します。
|
|
.It int Fn pthread_attr_setschedpolicy "pthread_attr_t *attr" "int policy"
|
|
スレッドの属性オブジェクトでスケジューリング方針属性を設定します。
|
|
.It int Fn pthread_attr_setscope "pthread_attr_t *attr" "int contentionscope"
|
|
スレッドの属性オブジェクトでコンテンション範囲属性を設定します。
|
|
.It int Fn pthread_attr_setstacksize "pthread_attr_t *attr" "size_t stacksize"
|
|
スレッドの属性オブジェクトでスタックサイズ属性を設定します。
|
|
.It int Fn pthread_attr_setstackaddr "pthread_attr_t *attr" "void *stackaddr"
|
|
スレッドの属性オブジェクトでスタックアドレス属性を設定します。
|
|
.It int Fn pthread_attr_setdetachstate "pthread_attr_t *attr" "int detachstate"
|
|
スレッドの属性オブジェクトで切り離し状態を設定します。
|
|
.El
|
|
.Sh MUTEX ルーチン
|
|
.Bl -tag -width Er
|
|
.It int Fn pthread_mutexattr_destroy "pthread_mutexattr_t *attr"
|
|
MUTEX 属性オブジェクトを破壊します。
|
|
.It int Fn pthread_mutexattr_init "pthread_mutexattr_t *attr"
|
|
MUTEX 属性オブジェクトをデフォルト値で初期化します。
|
|
.It int Fn pthread_mutex_destroy "pthread_mutex_t *mutex"
|
|
MUTEX を破壊します。
|
|
.It int Fn pthread_mutex_init "pthread_mutex_t *mutex" "const pthread_mutexattr_t *attr"
|
|
指定された属性で MUTEX を初期化します。
|
|
.It int Fn pthread_mutex_lock "pthread_mutex_t *mutex"
|
|
MUTEX をロックし、MUTEX が使用できるようになるまでブロックします。
|
|
.It int Fn pthread_mutex_trylock "pthread_mutex_t *mutex"
|
|
MUTEX をロックしようとしますが、
|
|
現行スレッドも含めた別のスレッドで
|
|
MUTEX がロックされている場合はブロックしません。
|
|
.It int Fn pthread_mutex_unlock "pthread_mutex_t *mutex"
|
|
MUTEX のロックを解除します。
|
|
.El
|
|
.Sh 条件変数ルーチン
|
|
.Bl -tag -width Er
|
|
.It int Fn pthread_condattr_init "pthread_condattr_t *attr"
|
|
条件変数属性オブジェクトをデフォルト値で初期化します。
|
|
.It int Fn pthread_condattr_destroy "pthread_condattr_t *attr"
|
|
条件変数属性オブジェクトを破壊します。
|
|
.It int Fn pthread_cond_broadcast "pthread_cond_t *cond"
|
|
指定された条件変数で現在ブロックされている、
|
|
すべてのスレッドのブロックを解除します。
|
|
.It int Fn pthread_cond_destroy "pthread_cond_t *cond"
|
|
条件変数を破壊します。
|
|
.It int Fn pthread_cond_init "pthread_cond_t *cond" "const pthread_condattr_t *attr"
|
|
指定された属性で条件変数を初期化します。
|
|
.It int Fn pthread_cond_signal "pthread_cond_t *cond"
|
|
指定された条件変数でブロックされているスレッドの、
|
|
最低 1 つのブロックを解除します。
|
|
.It int Fn pthread_cond_timedwait "pthread_cond_t *cond" "pthread_mutex_t *mutex" "const struct timespec *abstime"
|
|
指定された時間以内で条件を待機し、
|
|
指定された MUTEX をロックします。
|
|
.It int Fn pthread_cond_wait "pthread_cond_t *" "pthread_mutex_t *mutex"
|
|
条件を待機し、指定された MUTEX をロックします。
|
|
.El
|
|
.Sh 読み書きロックルーチン
|
|
.Bl -tag -width Er
|
|
.It int Fn pthread_rwlock_destroy "pthread_rwlock_t *lock"
|
|
読み書きロックオブジェクトを破壊します。
|
|
.It int Fn pthread_rwlock_init "pthread_rwlock_t *lock" "const pthread_rwlockat-tr_t *attr"
|
|
読み書きロックオブジェクトを初期化します。
|
|
.It int Fn pthread_rwlock_rdlock "pthread_rwlock_t *lock"
|
|
読み書きロックを読込み用にロックし、
|
|
ロックを取得できるまでブロックします。
|
|
.It int Fn pthread_rwlock_tryrdlock "pthread_rwlock_t *lock"
|
|
読み書きロックを読込み用にロックしようとしますが、
|
|
ロックを使用できない場合はブロックしません。
|
|
.It int Fn pthread_rwlock_trywrlock "pthread_rwlock_t *lock"
|
|
読み書きロックを書込み用にロックしようとしますが、
|
|
ロックを使用できない場合はブロックしません。
|
|
.It int Fn pthread_rwlock_unlock "pthread_rwlock_t *lock"
|
|
読み書きロックを解除します。
|
|
.It int Fn pthread_rwlock_wrlock "pthread_rwlock_t *lock"
|
|
読み書きロックを書込み用にロックし、
|
|
ロックを取得できるまでブロックします。
|
|
.It int Fn pthread_rwlockattr_destroy "pthread_rwlockattr_t *attr"
|
|
読み書きロック属性オブジェクトを破壊します。
|
|
.It int Fn pthread_rwlockattr_getpshared "pthread_rwlockattr_t *attr" "int *pshared"
|
|
プロセスで共有している、
|
|
読み書きロック属性オブジェクトの設定を取り出します。
|
|
.It int Fn pthread_rwlockattr_init "pthread_rwlockattr_t *attr"
|
|
読み書きロック属性オブジェクトを初期化します。
|
|
.It int Fn pthread_rwlockattr_setpshared "pthread_rwlockattr_t *attr" "int *pshared"
|
|
プロセスで共有している、
|
|
読み書きロック属性オブジェクトの設定を設定します。
|
|
.El
|
|
.Sh スレッド固有コンテキストルーチン
|
|
.Bl -tag -width Er
|
|
.It int Fn pthread_key_create "pthread_key_t *key" "void (*routine)(void *)"
|
|
スレッドに固有なデータキーを作成します。
|
|
.It int Fn pthread_key_delete "pthread_key_t key"
|
|
スレッドに固有なデータキーを削除します。
|
|
.It void * Fn pthread_getspecific "pthread_key_t key" "void **value_ptr"
|
|
指定されたキーのスレッドに固有な値を入手します。
|
|
.It int Fn pthread_setspecific "pthread_key_t key" "const void *value_ptr"
|
|
指定されたキーのスレッドに固有な値を設定します。
|
|
.El
|
|
.Sh クリーンアップルーチン
|
|
.Bl -tag -width Er
|
|
.It void Fn pthread_cleanup_pop "int execute"
|
|
呼び出しスレッドのキャンセルクリーンアップスタックの
|
|
最上位でルーチンを削除し、オプションで起動します。
|
|
.It void Fn pthread_cleanup_push "void (*routine)(void *)" "void *routine_arg"
|
|
指定されたキャンセルクリーンアップハンドラを呼び出し
|
|
スレッドのキャンセルスタックにプッシュします。
|
|
.El
|
|
.Sh インストレーション
|
|
現在の FreeBSD POSIX スレッドシステムは、
|
|
スレッドセーフな libc 関数とスレッド関数を含むライブラリ
|
|
.Fa libc_r
|
|
で構築されています。このライブラリは、スレッドアプリケーションの
|
|
.Fa libc
|
|
を置き換えます。
|
|
.Pp
|
|
デフォルトでは、
|
|
.Fa libc_r
|
|
は 'make world' の一部として構築されます。
|
|
.Fa libc_r
|
|
の構築を無効にするには、'-DNOLIBC_R' オプションを
|
|
.Xr make 1
|
|
に指定する必要があります。
|
|
.Pp
|
|
gcc には FreeBSD に固有なオプションが追加されており、
|
|
スレッドプロセスのリンクが簡単になっています。
|
|
.Fa gcc -pthread
|
|
を実行すると、
|
|
.Fa libc
|
|
ではなく
|
|
.Fa libc_r
|
|
にスレッドプロセスがリンクされます。
|
|
.Sh 規格
|
|
接頭語
|
|
.Fa pthread_
|
|
が付き、接尾語
|
|
.Fa _np
|
|
や接頭語
|
|
.Fa pthread_rwlock
|
|
が付いていない
|
|
.Fa libc_r
|
|
の関数は、IEEE
|
|
.Pq Dq Tn POSIX
|
|
Std 1003.1 Second Eition 1996-07-12 に準拠しています。
|
|
.Pp
|
|
接頭語
|
|
.Fa pthread_
|
|
と接尾語
|
|
.Fa _np
|
|
が付いている libc_r の関数は、
|
|
POSIX スレッドの移植不可能なエクステンションです。
|
|
.Pp
|
|
接頭語
|
|
.Fa pthread_rwlock
|
|
が付いている libc_r の関数は、
|
|
Single UNIX Specification, Version 2 の
|
|
The Open Group が作成したエクステンションです。
|