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_trywait 및 sem_wait 서브루틴은 0을 반환합니다. 호출에 실패하면 세마포어의 상태는 변경되지 않고 서브루틴은 -1 반환하고 오류를 나타내는 errno를 설정합니다.
오류 코드
다음과 같은 경우 sem_trywait 및 sem_wait 서브루틴이 실패합니다:
| 항목 | 설명 |
|---|---|
| EACCES | 명명되지 않은 세마포어에 액세스할 수 있는 권한이 거부되었습니다. |
| EAGAIN | 세마포어가 이미 잠겨 있었으므로 sem_trywait 서브루틴으로 즉시 잠글 수 없습니다. |
| 기본값 | 잘못된 사용자 주소입니다. |
| EIDRM | 필요한 작업 중에 세마포어가 제거되었습니다. |
| EINTR | 신호가 서브루틴을 중단시켰습니다. |
| EINVAL | Sem 매개변수는 유효한 세마포어를 참조하지 않습니다. |
| ENOMEM | 필요한 작업에 필요한 메모리가 부족합니다. |
| ENOTSUP | 이 기능은 체크포인트 재시작된 프로세스에서는 지원되지 않습니다. |