Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 有人能用产品价值表解释生产者和消费者吗?_Algorithm_Semaphore_Producer Consumer - Fatal编程技术网

Algorithm 有人能用产品价值表解释生产者和消费者吗?

Algorithm 有人能用产品价值表解释生产者和消费者吗?,algorithm,semaphore,producer-consumer,Algorithm,Semaphore,Producer Consumer,每个人都使用的 我真的不明白p,V的意思 它首先说 消费者必须等待生产商生产某些产品,如果 队列为空 但后来它说 例如。单个消费者进入其关键部分。自从 fullCount为0,使用者阻塞 我想阻塞意味着等待?我的家庭作业要求我理解这种二进制信号量的使用,然后为不同类型的生产者-消费者问题实现解决方案。但我不知道何时递增(在P和V中设置哪个共享变量)或递减。所以我希望有知识渊博的人能给我解释一下?如果可以的话,请将我视为非cs学生?如果fullCount信号量为0,并且使用者执行p(fullCou

每个人都使用的

我真的不明白p,V的意思

它首先说

消费者必须等待生产商生产某些产品,如果 队列为空

但后来它说

例如。单个消费者进入其关键部分。自从 fullCount为0,使用者阻塞


我想阻塞意味着等待?我的家庭作业要求我理解这种二进制信号量的使用,然后为不同类型的生产者-消费者问题实现解决方案。但我不知道何时递增(在P和V中设置哪个共享变量)或递减。所以我希望有知识渊博的人能给我解释一下?如果可以的话,请将我视为非cs学生?

如果fullCount信号量为0,并且使用者执行p(fullCount),它将阻止(等待),直到生产者通过执行V(fullCount)来增加信号量

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


如果这不能回答您的问题,我想您需要更好地说明您的问题。

想象一对夫妇搬进一所房子

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

所以他们决定分开工作

  • 制片人保罗说他会把箱子从卡车上拿下来,排好队 在人行道上

  • Charlie Consumer说他会把箱子从人行道上拿下来 把它们放进房子里

它在一段时间内运行良好。但后来彼得出现了,他主动提出 帮助保罗兄弟。突然,人行道上挤满了以前的箱子 查理可以把它们捡起来。他为此感到恼火,于是打电话给兄弟们 康拉德和卡尔。但是康拉德伤了胳膊,卡尔继续玩 他的手机,所以现在:

  • 有时生产者(保罗、彼得)仍然超过消费者, 人行道上挤满了人,男人们不得不站在箱子旁边

  • 有时消费者(查理、康拉德、卡尔)超过了生产者 他们站在人行道上,而不是在屋里收拾东西

所以每个人都有一条规则:去那里之前检查一下人行道

不幸的是,这没有帮助。保罗和彼得,清空两端 在卡车上,两人都看到了几乎满是人的人行道,但足够清楚 多放一个盒子。于是他们俩都摘下一个盒子走了过去, 然后互相碰撞(比赛条件!)

昆西队终于出现了。他制定了三条新规则:

  • 保罗/彼得:你们两个都必须和我核实一下,以确保 下车前的空位:

  • 康拉德/卡尔/查理:你必须和我核实一下才能做出决定 在你拿起之前,一定有一个盒子:

  • 最后,因为我只有一个人,我无法跟踪 如果不止一个人在干扰线路,那么即使 如果我在第一步或第二步给你开绿灯,你仍然需要 检查以确保线路上没有其他人

  • 因此,彼得/保罗的最终规则是:

    waitFor(spaceOnSideWalk)
    waitFor(permissionToUseSideWalk))
    dropBoxOnSidewalk(box)
    nowSomeoneElseCanUse(permissionToUseSideWalk))
    nowSomeoneElseCanUse(boxesOnSideWalk)
    
    (和查理/卡尔/康拉德互补)

    如果你想到

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

    然后你就可以在wikipedia页面上找到正确的alogrithm了。

    你读过从信号量页面链接的页面了吗?它可能会回答你的问题。谢谢。非常清楚!非常有用。现在我开始讲这个了。我还是回来读它作为参考:D