1

我想知道如何解决生产者/消费者问题,但使用 2 个不同的消费者,我还需要知道如何使用严格交替来解决它。

我为 1 个生产者和 1 个消费者做了以下算法

producer()
{
   while(true)
   {
       if i == N //full buffer
          turn = 1
       while turn <> 0
       {
           // nothing
       }
       produceitem(&item)//produce the item
       insertitem(item, buffer)//insert the item in the buffer
       turn = 1
       //process zone
   }
}

consumer()
{
   while(true)
   {
       if i == 0 //empty buffer
          turn = 0
       while turn <> 1
       {
           // nothing
       }
       consumeitem(&item)
       deleteitem(buffer)//erase the item from buffer
       turn = 0
       //process zone
   }
}

我想知道使用那种“伪代码”来解决与 2 个消费者相同的问题(如果最后一个问题还可以的话)。

4

1 回答 1

2

在这两种情况下,您都可以小规模使用路由器模式:

路由器
(来源:enterpriseintegrationpatterns.com

基本上在队列之后,您放置特殊的人工消费者(路由器,只有一个)。如果您有两个相互竞争的消费者,只需将每个收到的消息随机放入outQueue1或中outQueue2

在严格交替的情况下,路由器会记住上次使用哪个队列并发送到第二个队列。

如果您不想引入额外的步骤,则需要某种同步。在第一种情况下,两个消费者都在竞争他们随机获得的同一个锁。后一种情况更复杂,需要更高级的同步,以便交替唤醒两个消费者。

于 2012-11-02T14:09:36.233 回答