C++11实现多线程电梯运行

       本工程利用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列表
运行效果:

          

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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小佐编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值