semop 예제

Posted by | august 02, 2019 | Ikke-kategoriseret | No Comments

semop 시스템 호출에 대한 예제 프로그램은 다음과 같습니다. 소스 프로그램 파일 semop.c 및 실행 파일 semop의 이름을 지정하는 것이 좋습니다. 마지막으로 sem_op이 0(0)이면 세마포의 값이 0이 될 때까지 호출 프로세스가 절전()됩니다. 이것은 세마포가 100% 이용률에 도달할 때까지 기다리는 것과 관련이 있습니다. 이 것의 좋은 예는 전체 사용률에 도달 하는 경우 세마포 세트의 크기를 동적으로 조정할 수 있는 수퍼 유저 사용 권한이 실행 되는 데몬 것입니다. 예를 들어, 데모 프로그램 semdemo.c, 아래, 일반적으로 스티븐스의 코드를 다시 구현 하는 참조. 89 /*semop 시스템 호출을 수행합니다.*/ 90 retrn = semop (세미, sops, nsops); 91if(retrn == -1) { 92 printf(“nSemop 실패, 오류 = %dn”, errno); 93 } 94 {95 printf (“nSemop가 성공했다”); 96 printf (“세미 = %dn”, semid에 대한 경우); `semop 시스템 호출 예`는 메뉴 구동 프로그램입니다. 그것은 semop 시스템 호출을 사용하는 모든 가능한 조합을 행사 할 수 있습니다. 이 문서에서는 세마포 기능에 대한 개요를 제공하고 세마포를 사용하여 파일에 대한 액세스를 제어하는 프로그램으로 끝납니다. 이 작업은 파일 잠금으로 쉽게 처리 할 수 있지만 공유 메모리보다 머리를 감싸는 것이 더 쉽기 때문에 좋은 예입니다.

인수 sops는 세마포 작업 구조의 사용자 정의 배열에 대한 포인터입니다. 구현은 응용 프로그램이 구현 정의 확장을 사용하지 않는 한 이 배열의 요소를 수정할 수 없습니다. 이러한 플래그 중 하나는 이름에서 알 수 있듯이 일반적으로 차단되는 상황이 발생하면 semop()에 대한 호출이 오류 EAGAIN로 반환되는 IPC_NOWAIT입니다. 리소스를 할당할 수 있는지 확인하기 위해 “폴링”하려는 경우에 적합합니다. 코드의 중요한 섹션을 통해 실행되는 여러 프로세스가 있을 때마다, 사람, 당신은 세마포가 필요합니다. 당신은 그들 중 zillions를 가지고 – 당신은 뿐만 아니라 그들을 사용할 수 있습니다. 호출 스레드는 잡을 신호를 수신합니다. 이 경우 지정된 세마포와 관련된 semncnt의 값이 감소되고 호출 스레드는 sigaction()에 규정된 방식으로 실행을 재개해야 합니다.

처음 세마포를 만들면 모두 초기화되지 않습니다. 다음 섹션을 참조하여 무료(즉 semop() 또는 semctl()로 표시하는 데 또 다른 호출이 필요합니다. 이것은 무엇을 의미합니까? 음, 세마포를 만드는 것은 원자가 아니라는 것을 의미합니다 (즉, 한 단계 프로세스가 아닙니다).