C 信号量值

标签 c posix semaphore

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

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
    -------
    ...

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

感谢您的帮助。

最佳答案

您没有在 sem_post 之后调用 sem_getvalue,因此 mutex_value 具有过时的值。

关于C 信号量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22178966/

相关文章:

c - 有没有办法用 2 个信号量来解决生产者-消费者问题?

c - 使用 regex.h 进行字符之间的匹配

c - ‘true’ 在 opencv 中未声明(首次在此函数中使用)

c - 二分查找 Int 数组大小问题

c - 如何在C中的第三个函数中使用来自2个不同函数的指针

c - 按创建时间排序 scandir()

c++ - 从程序集调用 C/C++ 函数 (OSX Mavericks x64)

multithreading - 为什么 GPUImage 使用信号量和处理队列而不是带有运行循环的线程?

c - fork 进程,信号量,为什么这个输出?

c - C中的for循环用于从文本文件中读取序列号