값을 변경하려고 시도한 세마포가 있는데 실패합니다. man
페이지를 읽은 후에 값이 0보다 작 으면 SETVAL
을 사용하면 실패 할 것이라고 배웠습니다 (초기화하지 못했습니다). 하지만 초기화 할 때 perror()
을 호출하면 "식별자가 제거되었습니다."라는 메시지가 나타납니다. SETALL
또는 공용체를 가리키는 지 확실하지 않습니다.세마포어 초기화
내 초기화는 다음과 같습니다 : 내 노동 조합이 단지 수행 매뉴얼 페이지와 여러 다른 웹 사이트처럼 선언 한
union semun argument;
unsigned short values[1];
values[0] = 1;
argument.array = values;
int retVal;
//INITIALIZE our semaphore
if(retVal = semctl(semId, 0, SETALL, argument) == -1)
{
perror("semaphore INITIALIZATION failed\n");
exit(1);
}
그리고 나는 내가 있음을 알 수 있도록 세마포어를 반환 확인 semget()
후 확인을 부품이 올바르게 작동하고 있습니다. 누군가 내가 잘못 가고 있다고 말할 수 있다면 크게 감사 할 것입니다.
누구든지 내 오류 뒤에있는 이유를 설명하면 내 실수에서 가장 도움이 될 것이라고 배울 수 있습니다.
감사
업데이트 : 분명히 그것은 == -1
그래서 난 < 0
로 변경하고 당신이 semId
이전에 초기화에 놓친 것은 아마도
당신은/시스템 V 세마포어를 필요로 할 이유가 있습니까? POSIX 세마포어는 일반적으로 훨씬 더 좋으며 (saner API와 사용자 공간에서 구현 될 수 있기 때문에 훨씬 빠릅니다.) 아주 강력하지는 않으며 오래된 시스템에서는 사용할 수 없을 수도 있습니다. –
'semid'를 언제 어떻게 설정 했습니까? – alk