有人可以用P V形式解释生产者和消费者吗?

时间:2012-11-14 07:05:09

标签: algorithm semaphore producer-consumer

每个人都使用的

Wikipedia has a sample code

老实说,我没有得到P,V的东西。

首先说

  

消费者必须等待生产者生产一些东西   队列是空的。

然后它说

  

实施例。单个消费者进入其关键部分。以来   fullCount为0,消费者阻止。

我认为阻止意味着等待?我的作业要求我理解这种二进制信号量的使用,然后针对不同类型的生产者 - 消费者问题实施解决方案。但是我没有得到何时增加(在P和V中设置哪个共享变量)或减少。所以我希望知识渊博的人可以向我解释一下?如果可能的话,像对待非学生一样对待我?

2 个答案:

答案 0 :(得分:3)

想象一下,有几个人搬进了一所房子。

他们有一辆满载箱子的卡车需要卸载到房子里。

所以他们决定分开工作。

  • Paul Producer说他会从卡车上取下盒子并将它们排好 在人行道上。

  • 查理消费者说他会从人行道上拿走箱子拿走 他们进了房子。

它运作良好一段时间。然后彼得出现了,他提出要 帮兄弟保罗。突然,人行道上装满了箱子 查理可以接他们。他对此感到沮丧,并打电话给兄弟 康拉德和卡尔。但康拉德伤了他的胳膊,卡尔一直在玩 他的电话,现在:

  • 有时候制片人(保罗,彼得)仍然超过消费者, 人行道很满,人们不得不站在一边拿着箱子

  • 有时消费者(charlie,conrad,carl)超过了生产者 他们站在人行道上,而不是在家打开包装

所以每个人都制定规则:在去那儿之前检查人行道!

不幸的是,它没有帮助。保罗和彼得,排空了两端 卡车,两人都看到了几乎完整的人行道,但显然足够了 一个盒子的空间。所以他们都摘了一个盒子,走过去, 然后互相哄骗(竞争条件!)。

最后Quincy Queue出现了。他制定了三条新规则:

  1. 保罗/彼得:你们两个都要和我核实,以确保有 在您下车前的空位:

  2. 康拉德/卡尔/查理:你必须和我一起检查 确保在您拿起之前有一个方框:

  3. 最后,因为我只有一个人,所以我无法跟踪 如果不止一个人弄乱了这条线,那就算了 如果我在步骤1或2中给你一个绿灯,你仍然需要 检查以确保没有其他人在线。

  4. 所以彼得/保罗的最终规则变成了:

    waitFor(spaceOnSideWalk)
    waitFor(permissionToUseSideWalk))
    dropBoxOnSidewalk(box)
    nowSomeoneElseCanUse(permissionToUseSideWalk))
    nowSomeoneElseCanUse(boxesOnSideWalk)
    

    (与查理/卡尔/康拉德互补)

    如果你想到

    waitFor == decrement == P
    nowSomeoneElseCanUse == increment == V
    

    然后你就会在维基百科页面上找到完全相同的算法。

答案 1 :(得分:1)

如果fullCount信号量为0且消费者执行P(fullCount),它将阻塞(等待),直到生产者通过执行V(fullCount)来增加信号量。

消费者和生产者都使用P(useQueue)来确保他们拥有更改队列的专有权。完成更改后,他们将执行V(useQueue)再次释放队列。

如果这不能回答你的问题,我认为你需要更好地指明你的问题。