오케이 저는 우리가 가지고있는 클래스가별로 가르치지 않았기 때문에 세마포어에 대해 배우러갔습니다. (영어가 아닌 교사의 비서였습니다. 내 11,500 달러 사용).세마포어는 이전보다 어떻게 작동하는지 알았습니다.
어쨌든, 나는 세마포어를 사용하는 방법을 알아 냈고, 잠자는 이발사 문제에 대한 연구를 시작했습니다.
이발사는 sem_post
사람에게 베개를 기다립니다. 고객은 이발사가 고객이 퇴장 할 수 있다고 말하는 "안전 벨트"를 게시 할 때까지 기다립니다.
어쨌든 세마포어는 스레드가 아니기 때문에 프로세스간에 공유되지 않는다는 것을 알고 난 후 다시 과제로 돌아 왔습니다. 할당과 함께 제공된 semget
, semop
및 semctl
의 설명은 인수로 structs
이고 설명은 매우 희박합니다.
이 설명은 나머지 웹에서 나의 발견에 직접적으로 반대합니다.이 웹은 sem_open
을 사용하여 세마포어 인 '파일'을 엽니 다.
어쨌든 - 내 질문은 추측 :
sem*
기능에 보낸 '키'는 무엇입니까? 때로는 IPC_PRIVATE로 설정되고 때로는 세마포어의 설명자로 사용됩니까?
나는 그들이
좋아요. 그래서 문제는 SysVIPC 이전에 사용되었던 SysVIPC 세마포를 다른 유형의 세마포와 혼동하고 있다는 것입니다. 내 문제를 설명해 주겠습니까? –
SysVIPC 세마포어 (sem * 함수로 조작)는 더 오래되었습니다. POSIX 세마포어 (sem_ * 함수로 조작)는 더 새롭고, 더 간단하고, 더 성능이 뛰어나지 만, 덜 강력합니다 (자동 실행 취소 작업이 없으며, 세마포어 그룹에서 원자 연산이 없음). 그러나 이름이없는 POSIX 세마포어 (sem_init 맨 페이지 참조)는 여러 프로세스에서 공유 할 수 있습니다. 공유 메모리를 사용하고 공유 세마포어로 사용하면됩니다. 맨 페이지에 모두 있습니다. – PSkocik
그 단락은 실제 유용한 정보로 이해의 구름을 가져 왔습니다 - 감사합니다! –