pthread

最重要メソッド

pthread_create

スレッドを生成する

宣言

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);

引数

thread: スレッド識別子(スレッドID) attr: 作成するスレッドの属性指定パラメータ. 通常はNULLでいい. start_routine: 新しいスレッドで実行される関数 arg: start_routineの引数になる. 必要ない場合はNULLでいい.

返り値

成功した場合は 0 失敗した場合は エラーコード

pthread_createが完了するとすぐに帰ってくる. また, スレッドの実行順序などについてはOSのみが知る.

pthread_exit

スレッドを終了する

宣言

void pthread_exit(void *retval);

引数

retval: これがスレッドの戻り値となる

pthread_join

スレッド終了待ち(消去)

宣言

int pthread_join(pthread_t thread, void **retval);

引数

thread: 待つスレッドのスレッドID. retval: 対象スレッドの戻り値が入る. 使わない場合はNULLでいい.

返り値

注意

一度pthread_joinを使って消去したスレッドに対して再度pthread_joinすることは 非常に危険なので絶対に行わない. これを実行した後には,

thread = NULL

としておくと良い

pthread_self

自分のスレッドIDを取得する

宣言

pthread_t pthread_self(void);

返り値

自分のスレッドID

pthread_mutex_trylock

ミューテックスがOFFの時はONにして0を返す. ONの時は0以外を返す. これはあまり使われない(後述)

宣言

int pthread_mutex_trylock(pthread_mutex_t *mutex);

pthread_mutex_lock

ミューテックスがOFFの時にはONにして0を返す. ONの時はOFFになるまで待つ. trylock よりもこちらの方がよく使われる.

宣言

int pthread_mutex_lock(pthread_mutex_t *mutex);

引数

attr: スレッドの属性. 普通に使う時はNULLでいい.

pthread_mutex_destroy

ミューテックスの破棄

宣言

int pthread_mutex_destroy(pthread_mutex *mutex);

pthread_mutex_unlock

ミューテックスをOFFにする

宣言

int pthread_mutex_unlock(pthread_mutex_t *mutex);

スレッド変数について

スレッドプログラミングで注意するべき点の一つに, 変数の扱いがある スレッドではメモリが共有されるため, 変数の扱いに気をつけなければならないが, スレッド変数を使うとうまくプログラミングすることができる時がある. ただし, これを用いるとコードが汚くなる傾向があるため, あまり用いられない. 構造体を用いて綺麗にコーディングする方が良いと言われる.

pthread_key_create pthread_key_delete pthread_setspecific pthread_getspecific