NAME

pthread_spin_lock, pthread_spin_trylock, pthread_spin_unlock - 스핀락 잠그기 및 풀기

SYNOPSIS

#include <pthread.h>

int pthread_spin_lock(pthread_spinlock_t *lock);
int pthread_spin_trylock(pthread_spinlock_t *lock);
int pthread_spin_unlock(pthread_spinlock_t *lock);

-pthread로 컴파일 및 링크.

glibc 기능 확인 매크로 요건 (feature_test_macros(7) 참고):

pthread_spin_lock(), pthread_spin_trylock():
_POSIX_C_SOURCE >= 200112L

DESCRIPTION

pthread_spin_lock() 함수는 lock이 가리키는 스핀락을 잠근다. 스핀락이 현재 잠겨 있지 않으면 호출 스레드가 즉시 락을 획득한다. 스핀락이 현재 다른 스레드에 의해 잠겨 있으면 호출 스레드가 맴돌면서 락을 검사하며, 락이 사용 가능해지는 시점에 호출 스레드가 락을 획득한다.

호출자가 이미 잡고 있는 락이나 pthread_spin_init(3)으로 초기화 하지 않은 락에 pthread_spin_lock()을 호출하는 결과는 규정되어 있지 않다.

pthread_spin_trylock() 함수는 pthread_spin_lock()과 비슷하되 lock이 가리키는 스핀락이 현재 잠겨 있으면 맴돌기를 하지 않고 호출이 즉시 EBUSY 오류로 반환한다.

pthread_spin_unlock() 함수는 lock이 가리키는 스핀락을 푼다. 그 락에 맴돌고 있는 스레드가 있으면 그 중 한 스레드가 락을 획득하게 된다.

호출자가 잡고 있지 않은 락에 pthread_spin_unlock()을 호출하는 결과는 규정되어 있지 않다.

RETURN VALUE

성공 시 이 함수들은 0을 반환한다. 실패 시 오류 번호를 반환한다.

ERRORS

pthread_spin_lock()이 다음 오류로 실패할 수 있다.

EDEADLOCK
시스템이 교착 조건을 탐지했다.

pthread_spin_trylock()이 다음 오류로 실패할 수 있다.

EBUSY
스핀락이 현재 다른 스레드에 의해 잠겨 있다.

VERSIONS

glibc 버전 2.2에서 이 함수들이 처음 등장했다.

CONFORMING TO

POSIX.1-2001.

NOTES

이 페이지에서 기술하는 함수들을 초기화 되어 있지 않은 락에 적용하는 결과는 규정되어 있지 않다.

pthread_spin_init(3)의 NOTES를 주의 깊게 읽어 보라.

SEE ALSO

pthread_spin_destroy(3), pthread_spin_init(3), pthreads(7)


2021-03-22