我有以下代码:
// DIE is macro i defined for catching errors
semc = sem_open(sem_name, O_CREAT, 0644, 1);
DIE(semc == SEM_FAILED, "sem_open");
unsigned int val;
rc = sem_getvalue(semc, &val);
DIE(rc == -1, "sem_getvalue");
printf("sem is %d\n" , val);
虽然我用1初始化信号量,但打印的值为0 ... 怎么解释这个?
答案 0 :(得分:1)
指定O_CREAT
不会强制它创建,它只会创建信号量(如果它还不存在)。由于您发现它不会占用您的初始化值,因此我猜您sem_name
时已经存在sem_open
,其值为0。