문제의 코드는 다음과 같습니다Posix 세마포. sem_wait()에서 내 스레드가 대기하는 이유는 무엇입니까?
void insertIntoFinalArray(char * string) {
sem_wait(&insert);
if (finalarray == NULL) finalarray = (char **) malloc(sizeof(char *));
else finalarray = (char **) realloc(finalarray, ((size_final + 1) * sizeof(char *)));
finalarray[size_final] = (char *) malloc(sizeof(string) + 1);
strcpy(finalarray[size_final], string);
size_final++;
sem_post(&insert);
}
삽입 sem_init(&insert, 0, 0);
EDIT로 초기화된다 : 이것은 내가 코드 교반했다 sem_init(&insert, 0, 1)
을 있어야하는데 그냥 다시 설정하지 않은 ... 그것은 어느 쪽이든 작동하지 않습니다 .
내가 이해하는 것처럼 스레드는 값이 0보다 클 때까지 sem_wait()에서 대기해야합니다. 그러나 디버그 함수에서 여러 스레드를 보여줍니다.
그래서 세마포어가 무엇인지 이해하지 못하고 있습니까?
편집 : OS X은 이름이없는 세마포어를 지원하지 않습니다 ... 그러나 insert = sem_open("insert", O_CREAT, 1);
을 사용해도 모든 스레드가 내 sem_wait() 행을 지나갈 수 있습니다.
을 사용하십시오. 코드의 다른 부분에 아무것도 게시하지 않으므로 아무 것도 시작하지 않기 때문에 절대 사용하지 마십시오. 무슨 디버거가 뭔지? 그것은 IDE에서입니까? – Duck
다른 곳이 없다. http://pastebin.com/Q1Pdi6bw –
값을 0으로 초기화하면, 첫 번째'sem_wait '을 지나치게된다. 뭔가 비린내가 있습니다. 나는 당신의 문제를 보여주는 완벽한 프로그램을 게시하는 것이 좋습니다. – wjl