0
我有一个信号量,我试图改变它的值,并失败。在阅读man
页面后,我了解到如果该值小于0并且您使用SETVAL
,则会失败(我没有初始化它)。但是,当我初始化它时,当我拨打perror()
时,我会看到“标识符已移除”。我不确定它是指SETALL
还是工会。信号量初始化
我的初始化是这样的:
union semun argument;
unsigned short values[1];
values[0] = 1;
argument.array = values;
int retVal;
//INITIALIZE our semaphore
if(retVal = semctl(semId, 0, SETALL, argument) == -1)
{
perror("semaphore INITIALIZATION failed\n");
exit(1);
}
我有我的工会宣布就像手册页和一些其他网站做的,我有semget()
后一检查,以确保它返回一个信号,所以我知道,部分工作正常。如果有人能告诉我我要去哪里,我会非常感激。
此外,如果有人可以请解释我的错误背后的原因,以便我可以从我的错误中学习,这将是最有帮助的。
感谢
更新:它显然不喜欢== -1
,所以我把它改成< 0
它工作得很好很奇怪我不知道感谢所有的答复虽然
是否有你想要/需要的SysV信号灯理由吗? POSIX信号量通常要好得多(更加安全的API,因为它们可以在用户空间中实现,所以速度要快得多),但功能并不那么强大,并且可能不适用于真正旧的系统。 – 2012-03-03 02:02:27
何时以及如何设置'semId'? – alk 2012-03-03 09:09:36