1

有问题的代码是:

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);EDIT:这应该是sem_init(&insert, 0, 1)我在搅动代码,只是没有将其设置回来......它无论如何都不起作用。

据我了解,线程应该在 sem_wait() 等待,直到值大于零。但是,调试显示函数内有多个线程。优格

那么我只是不了解信号量的作用还是?

编辑:OS X 不支持未命名的信号量......但是,即使使用也insert = sem_open("insert", O_CREAT, 1);允许所有线程通过我的 sem_wait() 行。

4

1 回答 1

0

感谢鸭子帮助我。

Apple gcc 在 semaphores.h 中定义了 sem_init,但它返回 -1 - 它没有实现。也就是说,您不能有未命名的信号量。相反,使用sem_open(name, options, initial value);

于 2013-10-11T01:15:18.550 回答