首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >查找POSIX信号量上阻塞的任务数

查找POSIX信号量上阻塞的任务数
EN

Stack Overflow用户
提问于 2013-07-25 04:37:48
回答 3查看 1.2K关注 0票数 0

有没有什么方法可以让我知道等待特定信号量的进程或线程的数量?就像一个API来检查值。Sem_getvalue()只返回0,而不是负数,它的绝对值是一些站点上提到的信号量上阻塞的任务数。

任何帮助都是最好的。

提前感谢!!

EN

回答 3

Stack Overflow用户

发布于 2013-09-03 08:46:30

我真的不喜欢POSIX信号量。它们缺少许多SYS信号量可用的功能。

如果您使用的是SYS V信号量,则可以使用semctl函数获取各种信息:

代码语言:javascript
运行
复制
int semctl(int semid, int semnum, int cmd, ...);

例如,要获取等待定义的信号量变为零的进程数:

代码语言:javascript
运行
复制
int cnt = semtcl(my_semid, 0, GETZCNT);

就这么简单!

SYS V信号量万岁!

票数 1
EN

Stack Overflow用户

发布于 2013-07-25 11:24:43

除了sem_getvalue之外,没有其他方法可以在POSIX API中做到这一点,正如您所看到的,语义是可选的。

也就是说,Linux将命名的POSIX信号量实现为/dev/shm下的文件,因此像fuser(1)这样的实用程序可以显示哪些进程打开了该文件。

如果这对您不起作用,您可以使用一个POSIX互斥锁、一个POSIX条件变量和一些空间来实现一个记账信号量,以记录信号量的值和所有的等待程序。

票数 0
EN

Stack Overflow用户

发布于 2016-11-30 15:10:25

您可能已经获取了一个全局atomic_t变量,并在调用sem_wait之前将其递增,然后在获得信号量的情况下递减。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17844348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档