【发布时间】:2014-03-26 23:22:28
【问题描述】:
如果有 1 个生产者、1 个消费者和 >1 大小的缓冲区,是否需要插入互斥锁?是否需要删除互斥锁?
如果有 1 个生产者、1 个消费者和 1 个大小的缓冲区,是否需要插入互斥锁?是否需要删除互斥锁?
如果有 >1 个生产者、>1 个消费者和 1 个大小的缓冲区,是否需要插入互斥锁?是否需要删除互斥锁?
谁能解释一下你是如何回答这些问题的。我知道两个线程在写入缓冲区时永远不应该从缓冲区中读取,但这是否意味着所有场景都需要两个互斥锁?
教授的回答:第一种情况是肯定的,后两种情况是否定的,因为当缓冲区非空时相当于一个完整的缓冲区。当缓冲区为空时,消费者被阻塞。当缓冲区包含一个项目时,生产者被阻塞。因此,在不使用互斥锁的情况下可以保证互斥。这无助于理解为什么会这样。好在自从发表这篇文章以来,有了更多的经验。
【问题讨论】:
-
这听起来像是家庭作业。看来你需要自己找出答案,这就是你获得理解的方式。
-
@Barmar 是的,这是一个家庭作业问题。我只是不认为我一直需要互斥锁的回答是正确的。我只是想要一点指导。
-
如果你发布了你的答案,解释了为什么你认为它是正确的,然后问你为什么错了,那会更合适。虽然 cs.stackexchange.com 可能是更适合讨论的地方。
-
阅读我写的问题的最后一行,我知道两个线程在写入缓冲区时永远不应该从缓冲区中读取,这让我认为所有情况都需要互斥锁。我觉得我错过了什么,复习笔记并没有帮助。
标签: mutex semaphore producer-consumer