msem_lock 서브루틴

용도

세마포어를 잠급니다.

라이브러리

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

구문

#include <sys/mman.h>
int msem_lock ( Sem Condition)
msemaphore *Sem;
int Condition;

설명

Msem_lock 서브루틴은 바이너리 세마포어를 잠그려고 시도합니다.

세마포어가 현재 잠겨 있지 않으면 잠겨 있고 msem_lock 서브루틴이 성공적으로 완료됩니다.

세마포어가 현재 잠겨 있고 Condition 파라미터의 값이 MSEM_IF_NOWAIT인 경우, msem_lock 서브루틴은 오류와 함께 반환됩니다. 세마포어가 현재 잠겨 있고 Condition 파라미터 값이 0인 경우, 호출 프로세스가 세마포어를 성공적으로 잠글 수 있거나 오류 조건이 발생할 때까지 msem_lock 서브루틴은 반환되지 않습니다.

공통의 메세모포어 구조를 공유하는 여러 프로세스에서 msem_lockmsem_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 서브루틴이 잡힌 신호에 의해 중단되었음을 나타냅니다.