首页 > 解决方案 > 如何判断 C 中的信号量中是否有进程在等待

问题描述

有什么方法可以检查是否有进程在 C 中的信号量内等待?我semaphore.h用来实现信号量,您可以在此处找到手册页。

sem_getvalue(sem_t * semaphoreToCheck, int * whereToStoreValue)允许您获取当前值semaphoreToCheck并将其存储在其中whereToStoreValue,但如果有任何进程在基于 Linux 的系统内部等待,sem_getvalue则始终存储0在其中。whereToStoreValuesemaphoreToCheck

但是,在 semaphore.h 中,信号量不会将进程添加到它的等待队列中,直到它的值变为负数。这使得无法确定进程是否正在等待semaphoreToCheck使用sem_getvalue,因为它会0whereToStoreValue内部semaphoreToCheck值为 0内部semaphoreToCheck值为负数时存储(这意味着信号量的等待队列中有进程)。

澄清一下,我的程序有一个循环,作为这个循环的一部分,我有时需要释放一个进程。但是,出于程序要求的原因,我一次不能发布多个进程。因此,我需要确保信号量仅在队列中有进程等待时才收到信号。这可以防止信号量的值变得大于0,并确保进程在没有首先排队进入信号量的情况下永远无法运行。

标签: csemaphore

解决方案


推荐阅读