PTHREAD(3)

명칭
pthread - POSIX thread 함수

서식
<pthread.h>

해설
POSIX thread는, 프로세스내에서 thread (thread)로 불린다 제어의 복수의 플로우(flow)를 요구하는 어플리케이션을 서포트하는 함수군입니다. multi-thread는, 프로그램의 퍼포먼스를 개선하기 위해서 사용됩니다.

이 섹션에서는, POSIX thread 함수의 개요에 대해 이하의 그룹으로 나누어 설명합니다.

•   thread routine

•   속성 오브젝트 routine

•   mutex routine

•   조건 변수 routine

•   읽기 / 기록 락 routine

•   thread 고유 문맥 routine

•   클린업 루틴

thread routine

    int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg) 새로운 실행하는 thread를 작성합니다.

    int pthread_detach(pthread_t thread) thread에 삭제를 위한 표시를 합니다.

    int pthread_equal(pthread_t t1, pthread_t t2) 2 개의 thread의 ID 를 비교합니다.

    void pthread_exit(void *value_ptr) 호출하고 있는 thread를 종료합니다.

    int pthread_join(pthread_t thread, void **value_ptr) 호출하고 있는 thread가, 지정한 thread의 종료를 기다리도록(듯이) 합니다.

    int pthread_cancel(pthread_t thread) thread의 실행을 취소합니다.

    int pthread_once(pthread_once_t *once_control, void (*init_routine)(void)) 초기화 routine를 한 번만 호출합니다.

    pthread_t pthread_self(void) 호출하고 있는 thread의 ID 를 돌려줍니다.

속성 오브젝트 routine

    int pthread_attr_destroy(pthread_attr_t *attr) thread의 속성 오브젝트를 파괴합니다.

    int pthread_attr_getinheritsched(const pthread_attr_t *attr, int *inheritsched) thread의 속성 오브젝트로부터 계승 스케줄링 속성을 취득합니다.

    int pthread_attr_getschedparam(const pthread_attr_t *attr, struct sched_param *param) thread의 속성 오브젝트로부터 스케쥴링 파라미터 속성을 취득합니다.

    int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy) thread의 속성 오브젝트로부터 스케줄링 방침 속성을 취득합니다.

    int pthread_attr_getscope(const pthread_attr_t *attr, int *contentionscope) thread의 속성 오브젝트로부터 컨텐션 범위 속성을 취득합니다.

    int pthread_attr_getstacksize(const pthread_attr_t *attr, size_t *stacksize) thread의 속성 오브젝트로부터 스택 사이즈 속성을 취득합니다.

    int pthread_attr_getstackaddr(const pthread_attr_t *attr, void **stackaddr) thread의 속성 오브젝트로부터 스택 주소 속성을 취득합니다.

    int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *detachstate) thread의 속성 오브젝트로부터 데탓치 상태 속성을 취득합니다.

    int pthread_attr_init(pthread_attr_t *attr) thread 속성 오브젝트를 기본값로 초기화합니다.

    int pthread_attr_setinheritsched(pthread_attr_t *attr, int inheritsched) thread의 속성 오브젝트에 계승 스케줄링 속성을 설정합니다.

    int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param) thread의 속성 오브젝트에 스케쥴링 파라미터 속성을 설정합니다.

    int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy) thread의 속성 오브젝트에 스케줄링 방침 속성을 설정합니다.

    int pthread_attr_setscope(pthread_attr_t *attr, int contentionscope) thread의 속성 오브젝트에 컨텐션 범위 속성을 설정합니다.

    int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize) thread의 속성 오브젝트에 스택 사이즈 속성을 설정합니다.

    int pthread_attr_setstackaddr(pthread_attr_t *attr, void *stackaddr) thread의 속성 오브젝트에 스택 주소 속성을 설정합니다.

    int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate) thread의 속성 오브젝트에 데탓치 상태 속성을 설정합니다.

mutex routine

    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 가 현재의 thread를 포함했다 다른 thread에 의해 락 되고 있는 경우에는, 블록 하지 않습니다.

    int pthread_mutex_unlock(pthread_mutex_t *mutex) mutex 의 락을 해제합니다.

조건 변수 routine

    int pthread_condattr_init(pthread_condattr_t *attr) 조건 변수의 속성 오브젝트를 기본값로 초기화합니다.

    int pthread_condattr_destroy(pthread_condattr_t *attr) 조건 변수의 속성 오브젝트를 파괴합니다.

    int pthread_cond_broadcast(pthread_cond_t *cond) 지정된 조건 변수로 현재 블록 되고 있다 모든 thread의 블록을 해제합니다.

    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 개의 thread의 블록을 해제합니다.

    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 를 잠급니다.

읽기 / 기록 락 routine

    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) 읽기 / 기록 락의 속성 오브젝트의 프로세스 공유 설정을 설정합니다.

thread 고유 문맥 routine

    int pthread_key_create(pthread_key_t *key, void (*routine)(void *)) thread 고유의 데이터 키를 작성합니다.

    int pthread_key_delete(pthread_key_t key) thread 고유의 데이터 키를 삭제합니다.

    void * pthread_getspecific(pthread_key_t key) 지정된 키의 thread 고유의 값을 취득합니다.

    int pthread_setspecific(pthread_key_t key, const void *value_ptr) 지정된 키의 thread 고유의 값을 설정합니다.

클린업 루틴

    void pthread_cleanup_pop(int execute) 호출하고 있는 thread의 취소 클린 업 스택의 최초의 routine를 삭제해, 옵션으로 그 routine를 실행합니다.

    void pthread_cleanup_push(void (*routine)(void *), void *routine_arg) 호출하고 있는 thread의 취소 스택으로 지정된 취소 클린 업 핸들러를 쌓습니다.

Installation
현재의 FreeBSD POSIX thread의 실장은, thread 세이프인 libc 함수와 thread 함수를 포함한다 프로그램 라이브러리 libc_r 그리고 구축되고 있습니다. 이 프로그램 라이브러리는 thread 어플리케이션의 libc (을)를 옮겨놓습니다.

디폴트에서는, libc_r (은)는 'make world'의 일부로서 구축됩니다. 이 구축을 무효로 하려면 , make(1) 에 '-DNOLIBC_R'옵션을 주지 않으면 안됩니다.

thread화 된 프로세스를 간단하게 링크 하기 위해서, gcc 에 FreeBSD 고유의 옵션이 추가되고 있습니다. gcc -pthread (은)는 thread화 된 프로세스에 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 thread에의 비휴대용 확장입니다.

pthread_rwlock 접두어가 붙은 libc_r 의 함수는, susv2 의 The Open Group 에 의해 작성된 확장입니다.