我目前正在为pthreads构建一个薄的C包装器,供内部使用.
Windows和QNX都是目标,幸运的是pthreads-win32端口似乎运行良好,而QNX符合我们实际目的的POSIX.
现在,在实现信号量时,我点击了该功能
sem_post_multiple(sem_t*, int)
这显然只在pthreads-win32上可用,但在QNX中缺失.顾名思义,该函数应该通过作为第二个参数给出的计数来增加信号量.据我所知,该功能既不是POSIX 1b也不是POSIX 1c的一部分.
虽然目前没有要求所述功能,但我仍然想知道为什么pthreads-win32提供了这个功能以及它是否有用.我可以尝试使用类似于以下内容的QNX模拟它:
sem_post_multiple_qnx(sem_t* sem, int count)
{
for(;count > 0; --count)
{
sem_post(sem);
}
}
我要求的是关于如何进行的建议/建议.如果共识建议实现QNX的功能,我也会感谢评论建议的代码是否是可行的解决方案.
提前致谢.
PS:为了清晰起见,我特意遗漏了我喜欢的C级课程.对于所有建议加强救援的人:由于管理原因,它不是我当前项目的选项.
最佳答案 无论如何,信号量是POSIX中的可选扩展.例如,OS X似乎没有完全实现它们.因此,如果您担心可移植性,无论如何都必须提供所需功能的包装.
您通过迭代sem_post模拟原子增量的方法肯定有缺点.
>它可能表现不佳,
通常使用sem_t的地方
性能关键环境.
>此操作不会
原子.令人困惑的事情可能会
在完成循环之前发生.
我会坚持刚刚必要的,严格遵守POSIX.请注意,sem_timedwait是信号量选项的另一个可选部分.