【问题标题】:C semaphore valueC 信号量值
【发布时间】:2014-03-04 17:34:22
【问题描述】:

我在理解以下代码示例的输出时遇到了一些问题。

int main(int argc, char *argv[]) {
sem_t *mutex_init;
int i = 0, mutex_value;
mutex_init = sem_open("/Semaphore", O_CREAT, 0644, 1);
for(i = 0; i < 10; i++) {
    if(sem_getvalue(mutex_init, &mutex_value) < 0) {
        perror("sem_getvalue() failed");
        exit(EXIT_FAILURE);
    }
    printf("mutex_value: %d\n",mutex_value);fflush(stdout);
    if(sem_wait(mutex_init) < 0) {
        perror("sem_wait() failed");
        exit(EXIT_FAILURE);
    }
    if(sem_getvalue(mutex_init, &mutex_value) < 0) {
        perror("sem_getvalue() failed");
        exit(EXIT_FAILURE);
    }
    printf("mutex_value: %d\n",mutex_value);fflush(stdout);
    if(sem_post(mutex_init) < 0) {
        perror("sem_post() failed");
        exit(EXIT_FAILURE);
    }
    printf("mutex_value: %d\n",mutex_value);fflush(stdout);
    printf("------\n");
}
return EXIT_SUCCESS;
}

我得到了以下输出

    mutex_value: 1
    mutex_value: 0
    mutex_value: 0
    ------
    mutex_value: 1
    mutex_value: 0
    mutex_value: 0

但期待这样的事情

    mutex_value: 1
    mutex_value: 0
    mutex_value: 1
    -------
    ...

我不确定,但也许这是因为“缓冲输出”或其他原因?

感谢您的帮助。

【问题讨论】:

    标签: c posix semaphore


    【解决方案1】:

    您没有在sem_post 之后调用sem_getvalue,因此mutex_value 具有陈旧值。

    【讨论】:

    • 哦。谢谢。我很尴尬。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 2013-01-16
    • 1970-01-01
    相关资源
    最近更新 更多