如何判断C

时间:2019-04-29 00:14:42

标签: c semaphore

是否有任何方法可以检查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,并确保在没有先排队进入信号量的情况下,进程将永远无法运行。

0 个答案:

没有答案