有没有什么方法可以让我知道等待特定信号量的进程或线程的数量?就像一个API来检查值。Sem_getvalue()只返回0,而不是负数,它的绝对值是一些站点上提到的信号量上阻塞的任务数。
任何帮助都是最好的。
提前感谢!!
发布于 2013-09-03 00:46:30
我真的不喜欢POSIX信号量。它们缺少许多SYS信号量可用的功能。
如果您使用的是SYS V信号量,则可以使用semctl函数获取各种信息:
int semctl(int semid, int semnum, int cmd, ...);
例如,要获取等待定义的信号量变为零的进程数:
int cnt = semtcl(my_semid, 0, GETZCNT);
就这么简单!
SYS V信号量万岁!
发布于 2013-07-25 03:24:43
除了sem_getvalue
之外,没有其他方法可以在POSIX API中做到这一点,正如您所看到的,语义是可选的。
也就是说,Linux将命名的POSIX信号量实现为/dev/shm
下的文件,因此像fuser(1)
这样的实用程序可以显示哪些进程打开了该文件。
如果这对您不起作用,您可以使用一个POSIX互斥锁、一个POSIX条件变量和一些空间来实现一个记账信号量,以记录信号量的值和所有的等待程序。
发布于 2016-11-30 07:10:25
您可能已经获取了一个全局atomic_t变量,并在调用sem_wait之前将其递增,然后在获得信号量的情况下递减。
https://stackoverflow.com/questions/17844348
复制相似问题