我有一个信号量,我试图改变它的值,但它失败了。阅读该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
工作得很好真的很奇怪我不知道感谢所有的回复