PTHREAD_RWLOCK_RDLOCK(3)

명칭
pthread_rwlock_rdlock, pthread_rwlock_tryrdlock - 읽기용의 읽기 / 기록 락의 획득

프로그램 라이브러리
libc_r

서식
<pthread.h> int pthread_rwlock_rdlock(pthread_rwlock_t *lock) int pthread_rwlock_tryrdlock(pthread_rwlock_t *lock)

해설
pthread_rwlock_rdlock() 함수는, lock 그리고 주어진, 락이 현재 기록용으로 보관 유지되지 않고, 기록 thread가 현재 그 락으로 블록되어 있지 않은, 읽기용의 락을 획득합니다. 읽기용의 락을 곧바로 획득할 수 없는 경우에는, 호출하고 있는 thread는 그 락을 획득할 수 있을 때까지 블록 합니다.

pthread_rwlock_tryrdlock() 함수는, 같은 조작을 실행합니다만, 곧바로 락을 획득할 수 없다 (즉, 락이 기록용으로 보관 유지되고 있는, 또는 기다리고 있는 기록 thread가 있다) 경우에는, 블록 하지 않습니다.

1 개의 thread는 복수의 동시의 읽기용 락을 보관 유지할 수가 있습니다. 그 경우에는, 개개의 획득된 것 위해(때문에) pthread_rwlock_unlock() 하지만 1 번씩 불려 가지 않으면 안됩니다.

호출하고 있는 thread가 기록용의 락을 보관 유지하고 있는 동안의, 읽기용의 락의 획득의 결과는, 미정도리입니다.

실장에 관한 주
기록측의 기아 상태를 막기 위해, 기록측이 독포함측보다 우선됩니다.

반환값
문제가 없는 경우는, pthread_rwlock_rdlock() 및 pthread_rwlock_tryrdlock() 함수는 0 을 돌려줍니다. 문제가 있는 경우는, 그 에러를 나타내기 위해서(때문에) 에러 번호가 돌려주어집니다.

관련 항목
pthread_rwlock_init(3), pthread_rwlock_trywrlock(3), pthread_rwlock_unlock(3), pthread_rwlock_wrlock(3)

표준
pthread_rwlock_rdlock() 및 pthread_rwlock_tryrdlock() 함수는, susv2 에 적합하고 있을 것입니다.

에러
pthread_rwlock_tryrdlock() 함수는, 이하의 경우에 실패합니다.

[EBUSY]
    기록 thread가 락을 보관 유지하고 있다, 또는 블록 되고 있기 (위해)때문에, 락을 획득할 수 없습니다.

pthread_rwlock_rdlock() 및 pthread_rwlock_tryrdlock() 함수는, 이하의 경우에 실패하는 일이 있습니다.

[EAGAIN]
    lock 에 대한 읽기용의 락의 최대수를 이미 넘고 있기 (위해)때문에, 락을 획득할 수 없습니다.

[EDEADLK]
    현재의 thread가 이미 기록용의 lock (을)를 소유하고 있습니다.

[EINVAL]
    lock 에 의해 지정된 값이 무효입니다.

[ENOMEM]
    락 (정적으로 초기화된 락에만 적용)의 초기화를 위해서(때문에) 충분한 메모리가 없습니다.

역사
pthread_rwlock_rdlock() 함수는, FreeBSD 3.0 그리고 처음 등장했습니다.