【发布时间】:2014-04-18 03:32:00
【问题描述】:
我一直在努力让自己更熟悉信号量,并且想知道为什么这段代码没有打印出我期望的值。
#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 上实现未命名的信号量。
【问题讨论】:
-
您没有检查 sem_init 或 sem_getvalue 的返回值,这将是一个很好的起点,以确保不会发生某些潜在错误。那个确切的代码,逐字逐句在我的系统上打印 1。
-
0 仅表示获取值的调用成功。使用信号量时,您不应该关心值,而只关心它们的状态。
-
嗯,他们都返回 -1,这意味着他们失败了。我错过了什么?有什么我需要的标志吗?
-
好吧,我运行了相同的代码,得到了
sem_getvalue() = 1。因此,您的代码没有任何问题。我用gcc del.c -lpthread编译它然后执行./a.out -
我正在编译:“gcc semtest.c -o semtest -lpthread” 我知道它等于 0。知道为什么...?好奇怪。