gpt4 book ai didi

c - Semop 返回标识符已删除

转载 作者:太空宇宙 更新时间:2023-11-04 00:05:11 25 4
gpt4 key购买 nike

我正在创建一个多进程应用程序,其中包含一个共享内存段和一个锁定它的信号量以及信号处理程序。

每当我锁定和解锁我的信号量时,一切正常,只要它在我的主程序(或其中一个子程序)中。

当我在信号处理程序中时出现问题。我在那里锁定信号量,对共享内存段进行一些更新并解锁它。

我有一个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} 初始化的我的 ipc 中只有一个信号量

最佳答案

事实证明,在我的代码中某处,我丢失了信号量 ID,而 semLock 和 semUnlock 试图锁定和解锁错误的 ID,并且它们返回错误

关于c - Semop 返回标识符已删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27011590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com