ええコンサルタント > セキュリティ・プラザー > セキュア・システム
「注」マニュアルページに詳細説明は書かれる。
初期化: int pthread_attr_init(pthread_attr_t *attr)
削除: int pthread_attr_destroy(pthread_attr_t *attr)
int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate)
int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *detachstate)
スレッドを合流させる必要があるかどうかは、この属性により決まる。
detackstate = PTHREAD_CREATE_JOINABLE , PTHREAD_CREATE_DETACHED
int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy)
int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy)
スレッドのスケジューリングポリシーを設定する。
policy = SCHED_OTHER, SCHED_RR, SCHED_FIFO
SCHED_RRとSCHED_FIFOはスーパーユーザ権限で実行されるプロセスだけを対象に、リアルタイムスケジューリングである。
int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param)
int pthread_attr_getschedparam(const pthread_attr_t *attr, struct sched_param *param)
int pthread_attr_setinheritsched(pthread_attr_t *attr, int inherit)
int pthread_attr_getinheritsched(const pthread_attr_t *attr, int *inherit)
inherit = PTHREAD_EXPLICIT_SCHED, PTHREAD_INHERIT_SCHED
PTHREAD_EXPLIRT_SCHEDはスケジューリングを属性によって、明示的に設定する。PTHREAD_INHERIT_SCHEDは親スレッドから属性を継承する。
int pthread_exit(void *retval)
int pthread_join(pthread_t th, void **thread_return)
int pthread_cancel(pthread_t thread)
int pthread_setcancelstate(int newstate, int *oldstate)
state = PTHREAD_CANCEL_ENABLE, PTHREAD_CANCEL_DISABLE
int pthread_setcanceltype(int newtype, int *oldtype)
type = PTHREAD_CANCEL_ASYNCHRONOUS, PTHREAD_CANCEL_DEFERRED
ヤマフォによる実行同期
バイナリヤマフォ:コードのある部分を保護し、任意の時点では一つの実行スレッドだけが該当部分を実行できるようにするためにつかされる。
計数ヤマフォ:コードのある部分を一定数のスレッドが実行できるようにする
#include <semaphore.h> int sem_init(sem_t *sem, int pshared, unsigned int value)
int sem_post(sem_t *sem) 一つだけ増 int sem_wait(sem_t *sem) 一つだけ減
it sem_destory(sem_t *sem)
一つのスレッドだけは、オブジェクトにアクセスできるように、オブジェクトをロックすることができる。
#include <pthread.h>
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr)
int pthread_mutex_lock(pthread_mutex_t *mutex)
int pthread_mutex_unlock(pthread_mutex_t *mutex)
int pthread_mutex_destory(pthread_mutex_t *mutex)
上記関数の戻り値は、全て成功なら0,それ以外ならエラーコードを返す。errnoはセットされないので、戻り値を使って、
エラーの内容を調べるしかない。