Unix信号量问题

时间:2010-12-07 05:18:10

标签: c unix semaphore shared-memory

有没有办法用unix信号量设置它们的值?我需要总是从多个消费者那里调用post(),并偶尔调用wait(),等待下一个post()发生。

如何实现这一目标?

原因是我正在实施生产者/消费者问题(1个生产者/最多2个消费者)。每个消费者都有一个内部队列,它存储似乎无法放在输出上的项目,因为其他消费者仍然缺少其他数据包,因此它们都以正确的顺序输出(因为它们来自生产者) 。当任何队列被认为是满的时候(假设有10个项目),我希望该进程等到另一个进程完成其工作(因为只有2个进程,我保证其他进程的数据包)正在屈服的是我需要开始做输出的数据包!)。

我的想法是,每次消费者处理任何内容并查找将其放入输出中时,它应该在信号量上调用类似post()的内容。每次消费者的队列都满了,它应该在同一个信号量上做一种wait()。这样,当另一个消费者完成其工作时,这个就被唤醒了。

应如何解决这种情况?我在正确的道路上吗?在这个项目中,我只能使用信号量和共享内存。

当然,我们的想法是尽可能避免旋转。

由于

2 个答案:

答案 0 :(得分:1)

我建议你看看斯坦福在C范式上给出的this video。这个特别涉及生产者/消费者信号量使用。

答案 1 :(得分:1)

您似乎最需要一个障碍来同步您的消费者。 似乎Posix给出了它的实现(pthread_barrier _ *)。

因此,与消费者数量建立共享障碍;当消费者完成时,它必须“在障碍处等待”。

否则,您可以使用另一个信号量来实现它。