我正在创建一个多进程应用程序,它具有共享内存段和信号量锁定它和信号处理程序。
每当我锁定并解锁我的信号量时,一切都可以,只要它在我的主程序(或其中一个孩子)中。
当我在信号处理程序中时,会出现问题。在那里我锁定信号量,在共享内存段上做一些更新并解锁它。
我有一个struct sembuf
让我们称之为sb
。
我的锁码
void semLock(){
sb.sem_op=-1;
semop(sID,sb,sizeof(sb);
}
我的解锁码
void semUnlock(){
sb.sem_op=1;
semop(sID,sb,sizeof(sb);
}
以及我如何做我的事情
void signalHandler(int segnum){
semLock();
//do some stuff
semUnlock();
}
由于sID
是全局的并且继承给父进程创建的所有子进程以及子进程运行锁定和解锁信号量的其他代码,因此没有真正的原因可以解决这个问题。
我认为问题是这是在信号处理程序内,但我不明白为什么。 终端中打印的错误是
semop failed identifier removed
我尝试使用谷歌搜索错误,但没有找到任何有意义或相关信息,可能会导致错误。
修改
当我创建sb
时,它已使用{0,-1,0}
初始化
我的ipcs中只有一个信号量
答案 0 :(得分:0)
事实证明,在我的代码中,我丢失了信号量ID,semLock和semUnlock试图锁定并解锁错误的ID并且他们返回错误