gpt4 book ai didi

c - POSIX 中 sem_getvalue() 的语义

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:43 25 4
gpt4 key购买 nike

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

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

所以我正在寻找一个 Linux 编译选项来使这些替代语义成为可能。

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

最佳答案

这个问题本质上是活泼的,sem_getvalue 函数,即使它返回一个有用的服务员数量指示,也不能保证当它返回时计数仍然正确并且您使用结果值。这听起来像是一个 XY 问题,因此您可能应该更好地解释您认为通过这样的计数能够实现的目标。

关于c - POSIX 中 sem_getvalue() 的语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56095037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com