2016-10-05 2 views
2

오케이 저는 우리가 가지고있는 클래스가별로 가르치지 않았기 때문에 세마포어에 대해 배우러갔습니다. (영어가 아닌 교사의 비서였습니다. 내 11,500 달러 사용).세마포어는 이전보다 어떻게 작동하는지 알았습니다.

어쨌든, 나는 세마포어를 사용하는 방법을 알아 냈고, 잠자는 이발사 문제에 대한 연구를 시작했습니다.

이발사는 sem_post 사람에게 베개를 기다립니다. 고객은 이발사가 고객이 퇴장 할 수 있다고 말하는 "안전 벨트"를 게시 할 때까지 기다립니다.

어쨌든 세마포어는 스레드가 아니기 때문에 프로세스간에 공유되지 않는다는 것을 알고 난 후 다시 과제로 돌아 왔습니다. 할당과 함께 제공된 semget, semopsemctl의 설명은 인수로 structs이고 설명은 매우 희박합니다.

이 설명은 나머지 웹에서 나의 발견에 직접적으로 반대합니다.이 웹은 sem_open을 사용하여 세마포어 인 '파일'을 엽니 다.

어쨌든 - 내 질문은 추측 :

sem* 기능에 보낸 '키'는 무엇입니까? 때로는 IPC_PRIVATE로 설정되고 때로는 세마포어의 설명자로 사용됩니까?

나는 그들이

답변

2

키가 전체 SysVIPC 서브 시스템을 통해 사용을 돕는 것보다 이러한 자원을 좀 더 혼란스러워하고있다 생각하고, 그들은 ftok(3) 기능을 이용하여 경로 이름에서 파생되는 의미 숫자 식별자입니다.

맨 페이지 또는 http://beej.us/guide/bgipc/output/html/singlepage/bgipc.html 또는 APUE book에서 SysV 세마포에 대한 자세한 내용을 확인할 수 있습니다.

+0

좋아요. 그래서 문제는 SysVIPC 이전에 사용되었던 SysVIPC 세마포를 다른 유형의 세마포와 혼동하고 있다는 것입니다. 내 문제를 설명해 주겠습니까? –

+0

SysVIPC 세마포어 (sem * 함수로 조작)는 더 오래되었습니다. POSIX 세마포어 (sem_ * 함수로 조작)는 더 새롭고, 더 간단하고, 더 성능이 뛰어나지 만, 덜 강력합니다 (자동 실행 취소 작업이 없으며, 세마포어 그룹에서 원자 연산이 없음). 그러나 이름이없는 POSIX 세마포어 (sem_init 맨 페이지 참조)는 여러 프로세스에서 공유 할 수 있습니다. 공유 메모리를 사용하고 공유 세마포어로 사용하면됩니다. 맨 페이지에 모두 있습니다. – PSkocik

+0

그 단락은 실제 유용한 정보로 이해의 구름을 가져 왔습니다 - 감사합니다! –

관련 문제