有问题的代码是:
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);
}
insert被初始化为sem_init(&insert, 0, 0);
编辑:这应该是sem_init(&insert, 0, 1)
我是代码搅拌而且没有将它设置回来......它无论如何都不起作用。
据我了解,线程应该在sem_wait()等待,直到该值大于零。但是,调试显示函数中的多个线程。
所以我只是不了解信号量的作用或者是什么?
编辑:OS X不支持未命名的信号量......但是,即使使用insert = sem_open("insert", O_CREAT, 1);
也允许所有线程通过我的sem_wait()行。
答案 0 :(得分:0)
感谢Duck帮助我。
Apple gcc在semaphores.h中定义sem_init,但它返回-1 - 它未实现。也就是说,你不能拥有未命名的信号量。相反,请使用sem_open(name, options, initial value);