sem_trywait 및 sem_wait 서브루틴

용도

세마포어를 잠급니다.

라이브러리

표준 C 라이브러리(libc.a)

구문

#include <semaphore.h>

int sem_trywait (sem)
sem_t *sem;


int sem_wait (sem)
sem_t *sem;

설명

Sem_trywait 서브루틴은 세마포어가 현재 잠겨 있지 않은 경우, 즉 세마포어 값이 현재 양수인 경우에만 sem 파라미터가 참조하는 세마포어를 잠급니다. 그렇지 않으면 세마포어를 잠그지 않습니다.

Sem_wait 서브루틴은 해당 세마포어에서 세마포어 잠금 연산을 수행하여 sem 파라미터가 참조하는 세마포어를 잠급니다. 세마포어 값이 현재 0인 경우, 호출 스레드는 세마포어를 잠그거나 신호에 의해 호출이 중단될 때까지 sem_wait 서브루틴 호출에서 반환되지 않습니다.

반환에 성공하면 세마포어의 상태가 잠기고 sem_post 서브루틴이 실행되어 성공적으로 반환될 때까지 잠긴 상태로 유지됩니다.

Sem_wait 서브루틴은 신호 전달에 의해 중단될 수 있습니다.

매개변수

항목 설명
sem 잠글 세마포어를 지정합니다.

리턴 값

호출 프로세스가 세마포어 잠금 작업을 성공적으로 수행한 경우 sem_trywaitsem_wait 서브루틴은 0을 반환합니다. 호출에 실패하면 세마포어의 상태는 변경되지 않고 서브루틴은 -1 반환하고 오류를 나타내는 errno를 설정합니다.

오류 코드

다음과 같은 경우 sem_trywaitsem_wait 서브루틴이 실패합니다:
항목 설명
EACCES 명명되지 않은 세마포어에 액세스할 수 있는 권한이 거부되었습니다.
EAGAIN 세마포어가 이미 잠겨 있었으므로 sem_trywait 서브루틴으로 즉시 잠글 수 없습니다.
기본값 잘못된 사용자 주소입니다.
EIDRM 필요한 작업 중에 세마포어가 제거되었습니다.
EINTR 신호가 서브루틴을 중단시켰습니다.
EINVAL Sem 매개변수는 유효한 세마포어를 참조하지 않습니다.
ENOMEM 필요한 작업에 필요한 메모리가 부족합니다.
ENOTSUP 이 기능은 체크포인트 재시작된 프로세스에서는 지원되지 않습니다.