PROLOG

이 매뉴얼 페이지는 POSIX 프로그래머 매뉴얼의 일부이다. 이 인터페이스의 리눅스 구현에 차이가 있을 수 있으며 (상세한 리눅스 동작 방식은 해당 리눅스 매뉴얼 페이지 참고) 리눅스에서 이 인터페이스가 구현되어 있지 않을 수도 있다.

NAME

pthread_rwlock_destroy, pthread_rwlock_init - 읽기-쓰기 락 객체 파기 및 초기화

SYNOPSIS

#include <pthread.h>

int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);
int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock,
    const pthread_rwlockattr_t *restrict attr);
pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER;

DESCRIPTION

pthread_rwlock_destroy() 함수는 rwlock이 가리키는 읽기-쓰기 락 객체를 파기하고 그 락에서 쓰는 모든 자원을 해제한다. 락을 또 다른 pthread_rwlock_init() 호출로 다시 초기화 하기 전까지는 이후 그 락 사용의 결과가 규정되어 있지 않다. 구현 시 pthread_rwlock_destroy()에서 rwlock이 가리키는 객체를 비유효 값으로 설정하도록 할 수도 있다. rwlock을 잡고 있는 스레드가 있을 때 pthread_rwlock_destroy()를 호출하는 경우의 결과는 규정되어 있지 않다. 초기화 안 된 읽기-쓰기 락을 파기하려 하는 결과는 규정되어 있지 않다.

pthread_rwlock_init() 함수는 rwlock이 가리키는 읽기-쓰기 락을 사용하기 위해 필요한 자원이 있으면 할당하고서 그 락을 attr이 가리키는 속성들로 풀린 상태로 초기화 한다. attr이 NULL이면 기본 읽기-쓰기 락 속성들을 사용한다. 즉 기본 읽기-쓰기 락 속성 객체의 주소를 전달하는 것과 효과가 같다. 한 번 초기화 하고 나면 재초기화 없이 몇 번이든 락을 쓸 수 있다. 이미 초기화 된 읽기-쓰기 락을 지정해서 pthread_rwlock_init()을 호출하는 경우의 결과는 규정되어 있지 않다. 읽기 쓰기 락을 먼저 초기화 하지 않고 쓰는 경우의 결과는 규정되어 있지 않다.

pthread_rwlock_init() 함수가 실패하면 rwlock이 초기화 되지 않으며 rwlock의 내용이 규정되어 있지 않다.

rwlock이 가리키는 객체만을 동기화 수행에 사용할 수 있다. 그 객체의 사본을 pthread_rwlock_destroy(), pthread_rwlock_rdlock(), pthread_rwlock_timedrdlock(), pthread_rwlock_timedwrlock(), pthread_rwlock_tryrdlock(), pthread_rwlock_trywrlock(), pthread_rwlock_unlock(), pthread_rwlock_wrlock() 호출에서 참조할 때의 결과는 규정되어 있지 않다.

기본 읽기-쓰기 락 속성들이 적합한 경우에는 매크로 PTHREAD_RWLOCK_INITIALIZER를 써서 읽기-쓰기 락을 초기화 할 수 있다. 매개변수 attr을 NULL로 지정해 pthread_rwlock_init()을 호출하는 동적 초기화와 효과가 동등하되 오류 검사를 수행하지 않는다는 점이 다르다.

pthread_rwlock_init()attr 인자로 지정한 값이 초기화 된 읽기-쓰기 락 속성 객체를 가리키고 있지 않은 경우의 동작 방식은 규정되어 있지 않다.

RETURN VALUE

성공 시 pthread_rwlock_destroy()pthread_rwlock_init() 함수는 0을 반환한다. 아니면 오류를 나타내는 오류 번호를 반환한다.

ERRORS

다음 경우에 pthread_rwlock_init() 함수가 실패한다.

EAGAIN
읽기-쓰기 락을 새로 초기화 하는 데 필요한 (메모리 외의) 자원이 시스템에 부족하다.
ENOMEM
읽기-쓰기 락을 초기화 하기에 충분한 메모리가 없다.
EPERM
호출자에게 동작을 수행하기 위한 특권이 없다.

이 함수들은 오류 코드 [EINTR]을 반환하지 않는다.

이하는 규범적이지 않은 내용이다.

EXAMPLES

없음.

APPLICATION USAGE

이 함수들과 관련 읽기-쓰기 락 함수들을 쓰는 응용에서 POSIX.1-2008 Base Definitions 권의 3.287절 Priority Inversion에서 논의하는 우선순위 역전을 겪을 수 있다.

RATIONALE

pthread_rwlock_destroy()rwlock 인자로 지정한 값이 초기화 된 읽기-쓰기 락 객체를 가리키고 있지 않음을 구현에서 감지하는 경우 함수를 실패 처리하고 [EINVAL] 오류를 보고하기를 권장한다.

pthread_rwlock_int()attr 인자로 지정한 값이 초기화 된 읽기-쓰기 락 속성 객체를 가리키고 있지 않음을 구현에서 감지하는 경우 함수를 실패 처리하고 [EINVAL] 오류를 보고하기를 권장한다.

pthread_rwlock_destroy()pthread_rwlock_init()rwlock 인자로 지정한 값이 잠겨 있는 읽기-쓰기 락 객체를 참고하고 있음을, 또는 pthread_rwlock_init()rwlock 인자로 지정한 값이 이미 초기화 된 읽기-쓰기 락 객체를 가리키고 있음을 구현에서 감지하는 경우 함수를 실패 처리하고 [EBUSY] 오류를 보고하기를 권장한다.

FUTURE DIRECTIONS

없음.

SEE ALSO

pthread_rwlock_rdlock(), pthread_rwlock_timedrdlock(), pthread_rwlock_timedwrlock(), pthread_rwlock_trywrlock(), pthread_rwlock_unlock()

POSIX.1-2008 Base Definitions 권, 3.287절 Priority Inversion, <pthread.h>

Portions of this text are reprinted and reproduced in electronic form from IEEE Std 1003.1, 2013 Edition, Standard for Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 7, Copyright (C) 2013 by the Institute of Electrical and Electronics Engineers, Inc and The Open Group. (This is POSIX.1-2008 with the 2013 Technical Corrigendum 1 applied.) In the event of any discrepancy between this version and the original IEEE and The Open Group Standard, the original IEEE and The Open Group Standard is the referee document. The original Standard can be obtained online at http://www.unix.org/online.html.

Any typographical or formatting errors that appear in this page are most likely to have been introduced during the conversion of the source files to man page format. To report such errors, see https://www.kernel.org/doc/man-pages/reporting_bugs.html.


2013