炒鸡经典的同步问题!
一、问题描述
汽车司机与售票员之间必须协同工作,一方面只有售票员把车门关好后司机才能开车,因此,售票员关好车门应通知司机开车,然后售票员售票 。另一方面,只有当汽车已经停下,售票员才能开门上下客,故司机停车后应通知售票员。假定某两公共汽车上有一名司机和两名售票员,汽车当前正在始发站停车上客,试用信号量与PV操作求解该问题。
两名售票员是因为以前的公交车是两节车厢,所以是两名售票员,比较久远的题目背景啦💥~
二、问题求解
semaphore close1=0;
semaphore close2=0;
semaphore open1=0;
semaphore open2=0;
driver()
{
while(1)
{
P(close1); //司机问售票员1:“关好门了嘛”
P(close2); //司机问售票员2:“关好门了嘛”
开车;
停车;
V(open1); //司机通知售票员1:“车停啦,可以开门啦”
V(open2); //司机通知售票员2:“车停啦,可以开门啦”
}
}
conductor1()
{
while(1)
{
上客-关门-售票;
V(close1); //回答司机:“门关好啦,可以开车啦”
公交车行驶中;
P(open1); //问司机:“停车了嘛”
开门-下客;
}
}
conductor2()
{
while(1)
{
上客-关门-售票;
V(close2); //回答司机:“门关好啦,可以开车啦”
公交车行驶中;
P(open2); //问司机:“停车了嘛”
开门-下客;
}
}
就到这里啦,明天见!