POSIX中sem_getvalue()的语义

时间:2019-05-11 23:29:43

标签: c linux posix semaphore semantics

我需要使用PThreads.解决同步问题 在代码的某个时刻,一个线程需要知道信号量上阻塞的线程数(如sempahore.h中所定义)。

当我看一下sem_getvalue(sem_t *s, int *sval)的手册页时,据说返回的值sval在Linux中是0,但是根据POSIX,它可能具有其他语义,即sval的绝对值设置为信号量s上阻塞的线程数。

因此,我正在寻找一种Linux编译选项,以使这些替代语义成为可能。

我试图通过跟踪线程每次在信号量上执行sem_wait()时跟踪整数变量来模拟在某个信号量上阻塞的线程数。 但是我想知道这种方法的正确性,尤其是在比赛条件下。

2 个答案:

答案 0 :(得分:2)

问题本质上是合理的,并且sem_getvalue函数即使返回有用的侍者数量指示,也不能保证计数返回时仍正确无误,并且您使用结果值。这听起来像是XY问题,因此您可能应该更好地解释通过这种计数可以实现的想象力。

答案 1 :(得分:2)

摘自手册

  

sem_getvalue()放置指向的信号量的当前值   sem插入sval指向的整数。

信号量由第一个参数s(sem_t * s)指向。 sem_getvalue()中有第二个参数sval,它是一个指向int的指针。信号量的值以该整数返回,该指针为sval。

函数sem_getvalue()成功返回0,错误返回-1。