Linux多线程模拟司机售票员示例

本文通过Linux多线程模拟了司机售票员的工作流程,包括司机的开车、停车及售票员的开门、售票和关门动作。乘客的上车、下车也通过线程同步进行。在主函数中引入相关头文件并注意编译时使用-lpthread链接库。运行程序时,终端会显示实时操作,按Ctrl+c可停止。
摘要由CSDN通过智能技术生成

@Linux司机售票员示例
司机——售票员:
司机的动作流程分为开车、行驶、停车。
开车前必须要确保车门关闭好,故此要在开车动作前进行p操作直到售票员释放 【车门已关的信号】,司机线程在收到该信号量时p操作成功,结束阻塞状态,该线程继续运行。到停车动作完成时要释放【车已停好的信号】,售票员线程收到该信号量时结束阻塞状态,继续运行至完成打开车门动作。

void* driver()
{
   
 while(1)
 {
         
          
        sem_wait(&semid1);//减少信号的值,相当于p操作 不能开门,上下车
        printf("driver发车\n");
        printf("driver行驶\n");
        printf("driver停车\n");
       
        sem_post(&semid2);//增加信号的值,相当于v操作  可以售票、关门
 }

售票员——乘客:
售票员的动作流程分为开门、售票、关门。
乘客动作流程分为上车、下车。
售票员开门前必须确保车辆是停车状态,故在开车门动作前进行p操作,阻塞售票员进程直到司机释放【车辆停下信号量】,完成开门动作后,需要释放【车门已开的信号】,乘客线程此前一直处于阻塞状态(前面有p操作),收到【车门已开的信号】后便可以完成上车动作。售票员线程完成售票动作后乘客才能下车,故此售票员线程在完成售票后要释放一个【票已售】的信号,乘客在上车动作完成后一直处于阻塞状态,直到收到售票员【票已售】的信号后,乘客线程才能继续运行,完成下车动作。


                
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值