【发布时间】:2021-12-11 06:37:45
【问题描述】:
我目前正在用 C++ 编写一个程序,该程序使用线程模拟餐厅中的服务员和顾客。该程序运行 40 个客户线程和 3 个服务员线程,功能如下:
void *customer(void * vargp){
//depending on assigned table, call waiter 1-3 using semaphore
sem_post(&callWaiter);
//wait for waiter to respond
sem_wait(&waiterResponse);
//leave table and finish thread
}
void *waiter(void *vargp){
//this is what I'm trying to fix
while(there are still customers){ //this check has been a number of different attempts
sem_wait(&callWaiter);
sem_post(&waiterResponse);
}
}
我试图找到解决方案的问题是服务员会看到客户仍然活跃(通过我尝试的几种不同技术),然后阻止等待信号量,然后客户将完成并且会有不再是客户。有没有人知道服务员线程如何在最后一个客户完成之前检查正在运行的客户而不通过检查?
【问题讨论】:
-
它看起来像一个直接使用C库
pthread的C程序。如果真的是 C++,为什么不使用标准 C++std::threads 及其支持函数和类? -
如果只剩下一个顾客,三个服务员同时拨打
sem_wait()怎么办?通用方法存在根本缺陷。 -
添加到 Ted 的评论中。既然您说您正在“使用”并且可能使用 C++ 编译,请使用 C++11(或更高版本)解决方案。它会简单得多。看看像
, 这样的东西, , . -
我很抱歉,我应该澄清一下。我在学校的 linux 机器上运行这个程序(按照说明),它使用的是 c++ 98
-
建议:为教师提供他们想要的东西,但用现代材料补充您的教育,以简化向劳动力的过渡。
标签: c++ multithreading concurrency