2012-06-15 6 views

답변

14

<sys/sem.h>은 XSI (원래 Unix System V) 세마포어 용 인터페이스를 제공합니다. 이것들은 기본 POSIX 표준의 일부가 아니며 (그들은 XSI 옵션에 포함되어 있습니다. 이는 일반적으로 유닉스와의 호환성을위한 것입니다) 아직 폐기되지 않은 것으로 간주되지 않지만 많은 프로그래머는 비추천이라고 생각합니다. POSIX는 다음과 같이 권고합니다 : POSIX 권고 :

응용 프로그램 사용법

POSIX Realtime Extension은 프로세스 간 통신을위한 대체 인터페이스를 정의합니다. IPC를 사용해야하는 응용 프로그램 개발자는 XSI 프로세스 간 통신에 설명 된 IPC 루틴을 사용하는 모듈을 대체 인터페이스를 사용하도록 쉽게 수정할 수 있도록 응용 프로그램을 설계해야합니다.

XSI 세마포어의 장점과 단점은 커널 인터페이스 개체가 커널 공간 개체와 작동하고 있어야하기 때문입니다. 이것이 당신에게주는 주요 이점은 프로세스가 종료되거나 예기치 않게 죽은 경우 커널이 작업을 철회 할 수 있도록 커널을 설정할 수 있다는 것입니다. 주요 비용은 모든 작업이 커널 공간에 왕복하는 것, 즉 속도가 매우 느리다는 것입니다. 그것들을 사용하기위한 인터페이스도 매우 둔하고 배우기 힘들며 반드시 프로세스 공유 리소스이기 때문에 공유 네임 스페이스 및 리소스 정리 문제를 처리해야합니다.

<semaphore.h>은 프로세스가 커널을 호출하여 절전 모드로 들어가는 경우를 제외하고는 사용자 공간에서 완전히 구현 될 수있는 방식으로 설계된 POSIX 세마포어를 정의합니다. 성능은 거의 최적화되어 있어야합니다 (즉, 자신의 능력을 뛰어 넘는 것은 거의 불가능합니다).하지만 XSI 세마포어만큼 기능적이지는 않습니다. POSIX 세마포어는 또한 프로세스 로컬 세마포어 (다중 스레드 환경에서 사용하기 위해, 또는 어떤 경우에는 단일 스레드 프로그램의 신호 처리기) 또는 프로세스 공유 세마포어를 원하는지 여부를 선택할 수있는 옵션을 제공합니다. 후자의 경우 시스템이 공유 네임 스페이스에서 이름으로 할당하도록 처리할지 또는 공유 메모리를 직접 가져 와서 공유 메모리에서 초기화할지 여부를 선택할 수도 있습니다.

4

서로 동일하지는 않지만 두 가지 구현이 다르며 서로 다른 기능 집합을 제공합니다. semaphore.h은 posix 구현이고 sys/sem.h은 sysV 구현입니다. POSIX는 가볍고 널리 사용되는 considered입니다.

관련 문제