AFAIK 세마포는 실제로 단지 핸들이며, 열리는 프로세스에 유효합니다. 실제 세마포 정보는 커널 메모리에 있습니다. GETVAL 또는 GETALL을 사용하여 semctl()을 사용하면 공정이 정확한 순간에 세마포의 값을 검사할 수 있습니다. semctl()이 값을 반환할 기회를 얻기 전에 다른 프로세스가 값을 변경할 수 있으므로 프로세스는 이 값을 올바른 값으로 의존해서는 안 됩니다. 이 시나리오는 악용 가능한 보안 취약점의 가능성을 만드는 확인-투-사용 시간(Time-to-Time-of-Time)이라고 하는 버그 클래스의 한 예입니다. 다음은 memwriter 및 memreader 프로그램이 공유 메모리를 통해 통신하는 방법에 대한 개요입니다: 세마포 자전거 예제에 대한 작은 수정 초기 값을 100으로 초기화해야 합니다. 자전거를 빌릴 때마다 값이 감소하므로 자전거가 반환 될 때마다 더 이상 자전거를 빌릴 수 없으므로 0에서 값이 증가하면 100에서 더 이상 자전거가 없습니다 100에서 모든 자전거가 있습니다. , memreader는 공유 메모리에서 ASCII 바이트를 읽고 정리하고 종료합니다. 다음 예제에서는 위에서 세마포예와 동일한 System V를 보여 주실 수 있습니다. 다른 시스템 V IPC 코드와 마찬가지로 먼저 세마포를 식별하기 위해 key_t가 필요합니다.

세마포를 만든 후 세마포의 식별자 sem및 인수(공용구조체 변수에 지정)와 함께 SETVAL 매개변수를 semctl()에 전달하여 초기화됩니다. 두 번째 매개 변수 semnum semctl()에 대 한 두 호출에서 0으로 설정 되지만 다른 이유로 합니다. 세마포의 값을 초기화하는 데 사용되는 첫 번째 semctl()에서 semnum은 집합에서 수정되는 세마포를 나타냅니다. 마지막 줄의 semctl()은 집합 자체를 삭제합니다. 단일 세마포가 아닌 집합에 영향을 주는 작업의 경우 semnum이 무시되고 일반적으로 0으로 설정됩니다. POSIX 세마포는 두 가지 형태로 제공됩니다: 명명된 세마포와 이름 없는 세마포. 공유 파일 및 공유 메모리 예제에서는 프로세스가 공유 저장소, 한 경우의 파일 및 다른 경우의 메모리 세그먼트를 통해 프로세스와 통신하는 방법을 보여 준다. 두 방법 모두에 대한 API는 비교적 간단합니다. 이러한 접근 방식에는 공통적인 단점이 있습니까? 현대의 응용 프로그램은 실제로 대규모 데이터 스트림을 통해 스트리밍 데이터를 처리하는 경우가 많습니다.