是否有任何方法可以检查C中的信号量内是否有等待的进程?我正在使用semaphore.h
来实现信号量,您可以在其中找到here的手册页。
sem_getvalue(sem_t * semaphoreToCheck, int * whereToStoreValue)
允许您在semaphoreToCheck
内获取当前值并将其存储在whereToStoreValue
内,但是sem_getvalue
将始终将0
存储在{{1}中},如果在基于Linux的系统上whereToStoreValue
中有任何进程正在等待。
但是,在semaphore.h中,直到其值变为负值,信号灯才会将进程添加到其等待队列中。这使得无法使用semaphoreToCheck
来确定进程是否在semaphoreToCheck
中等待,因为当sem_getvalue
内的值为0 0中存储whereToStoreValue
>和,当semaphoreToCheck
中的值为负(表示信号的等待队列中有进程)时。
为澄清起见,我的程序有一个循环,作为该循环的一部分,我有时需要释放一个进程。但是,出于程序要求的原因,我一次不能释放多个进程。因此,我需要确保仅在队列中有等待处理的信号时才发出信号。这样可以防止信号量的值变得大于semaphoreToCheck
,并确保在没有先排队进入信号量的情况下,进程将永远无法运行。