msem_lock 서브루틴
용도
세마포어를 잠급니다.
라이브러리
표준 C 라이브러리(libc.a)
구문
설명
Msem_lock 서브루틴은 바이너리 세마포어를 잠그려고 시도합니다.
세마포어가 현재 잠겨 있지 않으면 잠겨 있고 msem_lock 서브루틴이 성공적으로 완료됩니다.
세마포어가 현재 잠겨 있고 Condition 파라미터의 값이 MSEM_IF_NOWAIT인 경우, msem_lock 서브루틴은 오류와 함께 반환됩니다. 세마포어가 현재 잠겨 있고 Condition 파라미터 값이 0인 경우, 호출 프로세스가 세마포어를 성공적으로 잠글 수 있거나 오류 조건이 발생할 때까지 msem_lock 서브루틴은 반환되지 않습니다.
공통의 메세모포어 구조를 공유하는 여러 프로세스에서 msem_lock 및 msem_unlock 서브루틴에 대한 모든 호출은 마치 직렬화된 호출처럼 동작합니다.
' msemaphore 구조에 ' msem_init 서브루틴에 대한 호출로 인해 발생하지 않은 값이 포함된 후 ' msem_lock ' 및 ' msem_unlock ' 서브루틴에 대한 (아마도 비어 있는) 호출 시퀀스가 이어지는 경우, 결과는 정의되지 않습니다. 메세마포어 구조의 주소는 중요합니다. Msemaphore 구조체에 다른 주소의 msemaphore 구조체에서 복사한 값이 포함되어 있으면 결과는 정의되지 않습니다.
매개변수
| 항목 | 설명 |
|---|---|
| Sem | 잠글 세마포어를 지정하는 메세마포어 구조를 가리킵니다. |
| 조건 | Msem_lock 서브루틴이 현재 잠긴 세마포어가 잠금 해제될 때까지 기다릴지 여부를 결정합니다. |
리턴 값
성공하면 msem_lock 서브루틴은 0 값을 반환합니다. 그렇지 않으면 -1 값을 반환하고 오류를 나타내는 errno 전역 변수를 설정합니다.
오류 코드
Msem_lock 서브루틴이 실패하면 errno 전역 변수가 다음 값 중 하나로 설정됩니다:
| 항목 | 설명 |
|---|---|
| EAGAIN | Condition 파라미터에 MSEM_IF_NOWAIT 값이 지정되어 있고 세마포어가 이미 잠겨 있음을 나타냅니다. |
| EINVAL | Sem 매개변수가 제거된 세마포어를 지정하는 msemaphore 구조를 가리키거나 Condition 매개변수가 유효하지 않음을 나타냅니다. |
| EINTR | Msem_lock 서브루틴이 잡힌 신호에 의해 중단되었음을 나타냅니다. |