使用unix信号量,是否可以设置其值?我需要始终从多个使用者处调用post(),不时调用一次wait(),它将等待下一个post()发生。
如何做到这一点?
原因是我正在实施生产者/消费者问题(1个生产者/最多2个消费者)。每个使用者都有一个内部队列,用于存储似乎无法放入输出的项目,因为其他使用者仍然缺少其他数据包,因此它们的输出顺序都正确(如它们来自生产者) 。当任何一个队列都被认为已满时(例如,有10个项目),我希望该进程等待另一个进程完成其工作(因为只有2个进程,所以我保证其他进程的数据包正在产生的数据包是我需要开始进行输出的数据包!)。
我的想法是,每当使用者处理任何东西并查找将其放入输出时,它都应在信号量上调用诸如post()之类的东西。每当使用者的队列已满时,它应该在同一信号量上执行某种wait()。这样,当另一个消费者完成工作时,该消费者就被唤醒。
应该如何解决这种情况?我在正确的道路上吗?在这个项目中,我仅限于使用信号量和共享内存。
当然,该想法是避免尽可能多的旋转。
谢谢
最佳答案
似乎您最需要障碍来同步消费者。
似乎Posix提供了它的实现(pthread_barrier_ *)。
因此,与消费者数量建立共同的壁垒;当消费者完成时,它必须“等待障碍”。
否则,您可以使用另一个信号量来实现它。
关于c - Unix信号量问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4373637/