c - 如何判断 C 中的信号量中是否有进程在等待
问题描述
有什么方法可以检查是否有进程在 C 中的信号量内等待?我semaphore.h
用来实现信号量,您可以在此处找到手册页。
sem_getvalue(sem_t * semaphoreToCheck, int * whereToStoreValue)
允许您获取当前值semaphoreToCheck
并将其存储在其中whereToStoreValue
,但如果有任何进程在基于 Linux 的系统内部等待,sem_getvalue
则始终存储0
在其中。whereToStoreValue
semaphoreToCheck
但是,在 semaphore.h 中,信号量不会将进程添加到它的等待队列中,直到它的值变为负数。这使得无法确定进程是否正在等待semaphoreToCheck
使用sem_getvalue
,因为它会0
在whereToStoreValue
内部semaphoreToCheck
值为 0和内部semaphoreToCheck
值为负数时存储(这意味着信号量的等待队列中有进程)。
澄清一下,我的程序有一个循环,作为这个循环的一部分,我有时需要释放一个进程。但是,出于程序要求的原因,我一次不能发布多个进程。因此,我需要确保信号量仅在队列中有进程等待时才收到信号。这可以防止信号量的值变得大于0
,并确保进程在没有首先排队进入信号量的情况下永远无法运行。
解决方案
推荐阅读
- php - 我可以更改 Yoast 在 WordPress 网站中生成的描述元标记的内容吗?
- opencv - imshow 似乎显示了错误的图像(不重复)
- go - 安装和使用 godef
- asp.net - 在不丢失格式的情况下编辑现有的 excel 文件 ASP.Net
- unity3d - 在 Unity 中使用 API 创建 ShoppingCart
- django - ModelChoiceField 小部件属性无效
- python - 如果你 send() 到 Python 中的生成器 *expression* 会发生什么?
- corda - 我可以在不同的机器上运行 Demobench 还是只在本地运行?
- arrays - VBA将单元格分配为数组公式
- java - Atom 1.29.0 不会运行 Java 程序