我一直在努力了解信号量,想知道为什么这段代码没有打印出我期望的值。
#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?我尝试在一些使用pthread的代码中使用信号量,并使用值为1初始化了信号量,但是当我调用sem_getvalue函数时,它打印出32767。我错过了什么吗?提前感谢您的帮助。
编辑:sem_init和sem_getvalue都返回-1。
编辑:问题已解决。似乎Mac上未实现未命名信号量。
sem_getvalue() = 1
。所以,你的代码没有问题。我使用gcc del.c -lpthread
编译它,然后执行./a.out
。 - brokenfoot