本工程利用C++11的线程类进行多线程的操作,涉及到线程的互斥量的使用,简单记录一下整个工程的关键内容: 主要是涉及到两个类的抽象,一个为电梯间,一个为电梯,一个电梯间类包含两个电梯类的对象;
电梯间选择电梯策略:
a)判断用户的本身请求状态是否与电梯的状态一致(UP or DOWN),满足后判断电梯的当前楼层与请求的楼层的层高关系,比如说:client从8楼到16楼,但是目前电梯处于10楼且 是上升状态,则该电梯不符合情况,该用户的信息不添加进电梯,而是留在电梯间的请求列表里符合情况时,则将client的信息添加进所选择的电梯requestList列表里面;一直循环检测电梯间的请求列表,对适合的client进行选择添加
b)选择电梯:
对电梯间的用户信息进行添加到选择的电梯去时,假如两台电梯都是满足(a)条件,则需要维护该用户相对两台电梯的一个权重(权重以请求的src楼层与电梯的current楼层差的       绝对值表示,电梯为STOP时候也符合该情况)然后选择权重小的电梯进行client信息的添加,并删除电梯间内存储的该用户的信息。
c)电梯间将client的信息传进适合的电梯时,对是处于STOP状态的电梯状态进行改变,根据src与current的相对位置改变(为UP or DOWN)
电梯的运行:
创建电梯运行线程,维护两个列表,一个维护楼层的请求列表,一个维护用户到达楼层的列表;
电梯移动的过程中进行进入用户的管理,以及到达用户迁出的处理;
每个楼层均检测是否有用户要进入电梯,有则将用户信息从requestList列表删除,添加入arriveList列表
运行效果:

          
该工程资源的地址:点击打开链接

C++11实现多线程电梯运行相关推荐

  1. java面向对象电梯运行代码_面向对象编程总结——多线程电梯

    最近的三周面向对象的作业是电梯问题.主要是对多线程编程的一种训练.主要还是对生产者--消费者模型的使用的理解.作业分成了三个阶段,第一个阶段是FIFO调度策略的电梯.第二个阶段是可捎带的电梯设计,第三 ...

  2. OO_Unit2_多线程电梯

    CSDN博客链接 一.第一次作业 1.需求分析 单部多线程傻瓜调度(FAFS)电梯 2.实现方案 输入接口解析 类似于Scanner,我们使用ElevatorInput进行阻塞式读取(第一次作业较简单 ...

  3. 2019年北航OO第二单元(多线程电梯任务)总结

    一.三次作业总结 1. 说在前面 对于这次的这三次电梯作业,我采用了和几乎所有人都不同的架构:将每个人当作一个线程.这样做有一定的好处:它使得整个问题的建模更加自然,并且在后期人员调度变得复杂时,可以 ...

  4. java多线程电梯调度_面向对象之多线程(可捎带电梯调度)

    面向对象之多线程(可捎带电梯调度) 1. 题目重述 ​本题完成的任务为多部多线程可捎带调度电梯的模拟,电梯系统具有的功能为:上下行.开关门.新增一部可以使用的电梯,电梯系统在某一层开关门时间内可以上下 ...

  5. java模拟电梯面向对象_OO_JAVA_电梯运行模拟_单元总结

    电梯运行模拟--三次作业总结 总体遵循的设计思路 逻辑解耦 电梯与调度器解耦 在我的三次电梯作业里,追求的目标都是让电梯运行与调度器分离,电梯只负责按照指令运行,目前的最终版本中,指令有UP.DOWN ...

  6. java线程future_Java中多线程对运行结果怎么利用future获取

    Java中多线程对运行结果怎么利用future获取 发布时间:2020-12-07 17:11:08 来源:亿速云 阅读:124 作者:Leah Java中多线程对运行结果怎么利用future获取?针 ...

  7. python 电梯运行_面向对象电梯系列总结

    一. 设计策略 1. 架构设计 三个线程:电梯,调度器,主线程(输入线程), 采用worker thread,生产者消费者模式.和同学讨论,发现有的观点认为:调度器更像是一个功能的集合,类似一个函数, ...

  8. BUAA_OO_博客作业2——多线程电梯之旅

    0 写在前面 终于,我们结束了OO第二个周期的作业,这几次作业也就是我们所早有耳闻的"电梯"作业. 现在就来写关于这几次作业的总结,主要会分析自己的设计方案和总体收获. 1 多线程 ...

  9. C++11实战——多线程的日志类

    C++11实战--多线程的日志类 C++标准库的std::cout和std::ofstream重载了operator<<,单线程使用非常简单.但由于其并非线程安全,在多线程中使用则需要自己 ...

最新文章

  1. Python学习--not语句
  2. seaborn使用FacetGrid函数可视化山脊图(Ridgeline Plot with Seaborn)
  3. 内存淘汰算法_「承」Redis 原理篇——Redis 的内存回收机制
  4. 生成路径 vs 设置_Simulink代码生成之模型配置
  5. Eigen(3)矩阵Matrix及其简单操作
  6. [UE4]C++静态加载问题:ConstructorHelpers::FClassFinder()和FObjectFinder()
  7. plupload怎么设置属性_店铺收银系统怎么用?好收银系统能提升店铺效率
  8. 如何使用Greg Mori的Superpixel MATLAB代码
  9. 大数据开发笔记(四):Hive分区详解
  10. Win下Eclipse提交hadoop程序出错:org.apache.hadoop.security.AccessControlException: Permission denied: user=
  11. python微信刷屏_用python玩转微信
  12. 2020年的19种最佳React Native App模板(包括5种免费)
  13. 一文读懂阿里云直播技术是如何实现的
  14. 网上商城所需软硬件架构分析
  15. JDBC数据库连接测试工具
  16. 关于与kafka的爱恨交织
  17. 使用微信公众号对接阿里妈妈后台,实现查卷返利机器人功能
  18. 郑清 - 日常作息表(2020-01)
  19. apache commons 系列学习
  20. 单相在线式不间断电源(B题)

热门文章

  1. 微型计算机普遍使用的编码是什么,微型计算机中普遍使用的字符编码是什么
  2. 1014: 求三角形的面积 C语言
  3. n9 android rom,三星N935L官方安卓9固件rom系统线刷包:LUC-N935LKLU4CSI1
  4. matlab中megn函数,直接序列扩频完整系统matlab仿真
  5. Tomcat启动后闪退或一会儿后退出
  6. 【项目总结】锂电池充电器
  7. android高德地图瓦片,2017版高德地图瓦片分析
  8. MVP模式 项目练习 Pas --新闻 音乐 图片 三个模块
  9. VisualDrag低代码拖拽模板
  10. c语言质变量变,量变和质变的根本区别是( )