@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操作),收到【车门已开的信号】后便可以完成上车动作。售票员线程完成售票动作后乘客才能下车,故此售票员线程在完成售票后要释放一个【票已售】的信号,乘客在上车动作完成后一直处于阻塞状态,直到收到售票员【票已售】的信号后,乘客线程才能继续运行,完成下车动作。
本文发布于:2024-02-03 04:19:05,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170690514448604.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |