我需要使用PThreads.
解决同步问题
在代码的某个时刻,一个线程需要知道信号量上阻塞的线程数(如sempahore.h
中所定义)。
当我看一下sem_getvalue(sem_t *s, int *sval)
的手册页时,据说返回的值sval
在Linux中是0
,但是根据POSIX,它可能具有其他语义,即sval
的绝对值设置为信号量s
上阻塞的线程数。
因此,我正在寻找一种Linux编译选项,以使这些替代语义成为可能。
我试图通过跟踪线程每次在信号量上执行sem_wait()
时跟踪整数变量来模拟在某个信号量上阻塞的线程数。
但是我想知道这种方法的正确性,尤其是在比赛条件下。
答案 0 :(得分:2)
问题本质上是合理的,并且sem_getvalue
函数即使返回有用的侍者数量指示,也不能保证计数返回时仍正确无误,并且您使用结果值。这听起来像是XY问题,因此您可能应该更好地解释通过这种计数可以实现的想象力。
答案 1 :(得分:2)
摘自手册
sem_getvalue()放置指向的信号量的当前值 sem插入sval指向的整数。
信号量由第一个参数s(sem_t * s)指向。 sem_getvalue()中有第二个参数sval,它是一个指向int的指针。信号量的值以该整数返回,该指针为sval。
函数sem_getvalue()成功返回0,错误返回-1。