我正在使用 Sys V Semaphores 测试一些代码,以了解其从各种事件中恢复的能力,并且对于其中一项测试,我在进程处于其关键部分时删除了信号量集(从终端)。当需要通过另一个调用来释放锁时,它返回了一个设置为semop
的错误代码。errno
EIDRM
根据 semop 的手册页,这些是每个errno
含义的描述:
EIDRM:信号量集已删除。
EINVAL:信号量集不存在,或者 semid 小于零,或者 nsops 具有非正值。
我想了解的是不存在的信号量集与已删除的信号量集之间的区别。我以为区别在于errno
如果EINVAL
信号量集在系统调用之前已被删除,并且EIDRM
信号量集在系统调用开始时已经存在并在完成之前被删除(例如信号量集通过系统调用在信号量上阻塞进程时被删除)。