sem_timedwait 예제

아래 표시된 프로그램은 이름 없는 세마포에서 작동합니다. 프로그램에서는 두 개의 명령줄 인수를 기대합니다. 첫 번째 인수는 SIGALRM 신호를 생성하는 경보 타이머를 설정하는 데 사용되는 초 값을 지정합니다. 이 처리기는 sem_post(3)를 수행하여 sem_timewait()를 사용하여 main() 에서 대기 중인 세마포를 증가시킴을 수행합니다. 두 번째 명령줄 인수는 sem_timedwait()에 대해 시간 지정 의 길이(초)를 지정합니다. sem_wait, sem_timedwait, sem_trywait – 세마포 어 int sem_timewait (sem_t *제한 sem, const struct 시간 사양 * abs_timeout 제한); 리눅스 프로그래머의 매뉴얼은 sem_wait() 함수에서와 같이 sem_wait() 함수에서 참조하는 세마포를 잠글 것입니다 sem_timewait() 함수에서 이것에 대한 철저한 예를 제공합니다. 그러나 sem_post() 함수를 수행하여 세마포의 잠금을 해제하기 위해 다른 프로세스 나 스레드를 기다리지 않고 세마포를 잠글 수 없는 경우 지정된 시간 시간이 만료되면 이 대기가 종료됩니다. 나는 10 초 후에 세마포를 줄일 수 없다면 내 프로그램에서 내 스레드를 중지하려고합니다 (다른 스레드는 그것을 늘릴 수 있거나 증가시킬 수 없음) 나는 이것을 위해 sem_timedwait ()를 사용할 수 있다는 것을 알았지만 그물에서 좋은 예를 찾을 수 없습니다. 따라서 sem_timewait()는 sem_wait()와 동일하지만, abs_timeout은 감소가 즉시 수행될 수 없는 경우 호출이 차단해야 하는 시간 제한에 대한 제한을 지정한다는 점을 제외하면 이 것을 대체하려고 합니다. abs_timeout 인수는 1970-01-01 00:00:00 +0000 (UTC) 이후 초 및 나노 초에서 절대 시간 시간을 지정 하는 구조를 가리킵니다. 이 구조는 다음과 같이 정의됩니다: 작업을 즉시 수행할 수 있는 경우 sem_timewait() 는 abs_timeout 값에 관계없이 시간 시간 오류로 실패하지 않습니다.

또한 이 경우 abs_timeout의 유효성이 확인되지 않습니다. sem_timewait() 함수는 sem_wait() 함수에서와 같이 지정된 세마포를 잠그습니다. 그러나 지정된 세마포를 잠글 수 있기 전에 다른 스레드 나 프로세스(sem_post()가)를 잠금 해제해야 하는 경우 sem_timewait() 함수는 시간 지정이 만료될 때까지 이 잠금 해제만 기다립니다. 콘솔에서 man sem_timewait를 입력하거나 온라인으로 문서를 방문하십시오. . . 세마포가 다른 스레드 나 프로세스에 의해 잠금이 해제 될 때까지 기다리는 방법을 지정합니다. 시간 초과는 시간 초과가 기준이 되는 시계로 측정된 시간(즉, 해당 클럭값이 abstime과 같거나 초과하는 경우)으로 측정된 초과 시간이 경과하거나 abstime에서 지정한 절대 시간이 이미 경과된 경우 만료시간이 만료됩니다. 통화 시간입니다.

신호 처리기는 sigaction(2) SA_RESTART 플래그의 사용에 관계없이 항상 이러한 함수 중 하나에 대한 차단된 호출을 중단합니다. 세마포를 즉시 잠글 수 있는 경우 어떠한 경우에도 시간 경과로 함수가 실패하지 않습니다. 세마포를 즉시 잠글 수 있는 경우 복근의 유효성을 확인할 필요가 없습니다. timespec 데이터 형식은 헤더의 구조체로 정의됩니다. 시간 시간은 CLOCK_REALTIME 시계를 기준으로 합니다. 시간 시간의 해결은 그 기반이 되는 시계의 해상도입니다. timespec 데이터 형식은 헤더의 구조체로 정의됩니다. 이러한 모든 함수는 성공 시 0을 반환합니다. 오류가 발생하면 세마포의 값이 변경되지 않고 -1이 반환되고 errno가 오류를 나타내도록 설정됩니다.

Comments are closed