C- Semaphore sem_getvalue没有返回我期待的东西?

时间:2014-04-18 03:32:01

标签: c semaphore

我一直试图让自己更熟悉信号量,并想知道为什么这段代码不能打印我期望的价值。

#include <semaphore.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char * argv[]) {
    sem_t sem;
    sem_init(&sem, 0, 1);
    int value;
    sem_getvalue(&sem, &value);
    printf("%d\n",value);

    return 0;
}

它为值打印0。但根据我的理解,它应该获得我初始化信号量的值为1?我尝试在一些带有pthreads的代码中使用信号量,并使用值1初始化信号量,但是当我调用sem_getvalue函数时,它打印32767.我在这里遗漏了什么?提前谢谢。

编辑:sem_init和sem_getvalue都返回-1

编辑:已解决。似乎未命名的信号量在Mac上没有实现。

3 个答案:

答案 0 :(得分:3)

我按预期获得输出。 (即1)

尝试使用链接与pthread库

gcc sema.c -lpthread

答案 1 :(得分:1)

它应该返回1,这是你初始化的值,
编译时应添加-pthread作为选项,例如gcc -pthread test.c

如果代码运行良好,则sem_init()sem_getvalue()都应返回0,
如果他们返回-1然后有一些错误,你应该得到错误标志,并检查linux上的手册页,看看发生了什么错误。

顺便说一句,你的代码在我的linux上返回1,这是正确的 手册页:man sem_initman sem_getvalue
您应该获得sem_init()的错误标志,然后首先检查man sem_init,因为信号量似乎没有在第一时间正确创建。

答案 2 :(得分:0)

Edit: Solved. It appears unnamed semaphores aren't implemented on Mac.

在Mac OSX上,POSIX信号量被视为已弃用。因此,它无法按预期工作。