========= 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