c++ - 如何判断线程 A 的所有实例何时从线程 B 完成
问题描述
我目前正在用 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);
}
}
我试图找到解决方案的问题是服务员会看到客户仍然活跃(通过我尝试的几种不同技术),然后阻止等待信号量,然后客户将完成并且不会再有顾客。有没有人知道服务员线程如何在最后一个客户完成之前检查正在运行的客户而不通过检查?
解决方案
推荐阅读
- visual-studio-code - VSCode:如何在上部选项卡上仔细检查时防止编辑器扩展
- python - 函数 add_time(time1,time2)
- javascript - 如何在节点 js 中找到本周的星期一?
- wpf - WPF 将 SelectedItem 绑定到另一个对象的属性
- javascript - 嵌套的 AngularJS 指令未从 Angular 组件获取表单
- uwp - UWP ApplicationData.Current.LocalFolder 在版本中为空
- javascript - 我的测试失败,因为“找不到 react-redux 上下文值;请确保组件包装在
" - jupyter-notebook - jinja2.exceptions.TemplateNotFound: null.tpl
- javascript - 你如何为你的不和谐机器人创建一个永久的 oauth 邀请?
- php - “/tmp/phpIKaDnv”文件不存在或不可读