【发布时间】:2020-03-04 15:28:15
【问题描述】:
我正在用 C++ 编写一个餐厅模拟程序,以练习该语言,尤其是 C++11 线程。
我打算使用可以执行以下操作的线程服务器类(即服务员):
收到新工作发布到全局餐桌的通知并接受工作(即安排刚进入餐厅的派对)
-
收到准备下订单并开始工作的一方的通知(即访问该方的餐桌,接受他们的订单并将其提交到酒吧或厨房的工作队列)
在订单完成时收到通知,从厨房或酒吧获取订单并将其送到正确的餐桌
这里最大的问题是我想要的行为类似于同时等待几个条件变量,我从this post 读到这是不可能的。
我宁愿不使用忙等待,因为这些任务可能需要几分钟或更长时间,这会消耗大量不必要的 CPU。
很可能,我想使用条件变量和增强信号的某种组合,但我不确定如何将其设计为最有效和简洁。
非常感谢任何有关设计或阅读的建议。
提前致谢!
【问题讨论】:
-
太宽泛/主要是意见,有很多可能的方法。抱歉,这种问题不适合 stackoverflow。
-
既然你提到了队列,生产者/消费者队列是一种完全可等待的线程间通信形式:github.com/cameron314/readerwriterqueue
-
@SamVarshavchik 对不起,我的帖子是基于什么观点的呢?我正在尽我最大的努力不要变得粗鲁,但我发现你的评论是不知情和不满的。我真的只是在寻找潜在的设计建议来解决我的用例。 Stack Overflow 是否禁止设计问题?请赐教。我是社区的新手。
-
@parktomatomi 我很欣赏这个建议。不幸的是,生产者/消费者只能承担服务员 1/3 的责任。
-
是的,对于 stackoverflow,设计问题通常过于宽泛/自以为是/离题。这是因为如果你问两个 C++ 开发人员设计 X 的最佳方式是什么,你会得到三个不同的答案。
标签: c++ multithreading c++11 asynchronous