SYSV 세마포어 대신 POSIX 세마포어를 사용하는 것을 고려하십시오. POSIX 디자인은 더 간단하고 깨끗합니다. 예를 들어, POSIX 세마포어는 지정된 초기 값으로 생성됩니다.
그러나 SYSV 세마포어에는 수행 할 수없는 작업 및 다중 요소 세마포어 집합 작업은과 같은 POSIX 세마포가 수행하지 못하는 기능이 있습니다. SYSV flavor를 사용해야한다면 ...
잘 알려진 키를 사용하여 세마포어 세트를 사용한다고 가정 해 보겠습니다. 그러면 생성 된 것과 다른 프로세스의 타이밍을 제어 할 수 없습니다 세마포어 세트는 세트에 액세스합니다. 최악의 경우, 동일한 키와 IPC_CREAT | IPC_EXCL
을 사용하여 세마포어 집합을 얻으려는 여러 프로세스가있을 수 있으며 초기화에 성공한 프로세스와 해당 플래그없이 다시 시도하는 프로세스는 EEXIST
입니다. 실제로, 그것은 엉망을 만듭니다.
관련없는 프로세스가 잘 알려진 세마포 집합 키를 사용하는 경우 관련된 세마포 집합은 시스템 리소스이며 프로세스에 개별적으로 속하지 않습니다. 이 경우 초기화 및 관리 전용 프로그램이 있어야합니다. 이들은 시스템 초기화 프레임 워크에 연결되어야합니다.
세마포 집합의 초기화를 보호하기 위해 다른 형태의 상호 배타를 사용할 수도 있습니다. 예를 들어 잠금 파일을 사용할 수 있습니다. 이 제한된 목적을 위해 POSIX 세마포어를 사용할 수도 있습니다.
세마포를 만드는 프로세스는 세마포를 사용하는 프로세스를 만들기 전에 초기화를 완료해야합니다. 이를 처리하는 일반적인 방법은 세마포어를 생성/초기화 한 다음 다른 프로세스를 fork/exec하는 것입니다. – user3386109
이 세마포어 그룹에 액세스하는 프로세스는 CLI에서 crond로 시작할 수 있으며 웹 서버에서 초기화 할 수 있습니다. 단일 프로세스에서 분기되지 않습니다. 그래서 세마포 그룹 자체를 보호해야하지만, 이걸 위해서 ... 어딘가에 세마포가 필요합니까? – drvtiny
그런 다음 시동 순서의 일부로 세마포어 그룹을 만들고 초기화하는 프로그램을 실행해야합니다. 세마포어를 사용하는 프로그램을 시작하기 전에 완료해야합니다. – user3386109