行人与机动车过路口问题
假设有一个路口,通行交通规则如下:只要没有机动车在通过路口行人就可以通过;只有没有行人在通过路口且没有其他机动车在通过路口时该机动车才能通过。请用P、V操作描述行人和机动车通过路口的同步互斥过程。
我的理解:行人有过路口的优先级大于机动车过路口的优先级;路口每次通过一辆机动车或人。没人时,机动车依次通行;有人时,车必须等全部人通过路口才能通行。
int count = 0; // 记录行人数量
Semaphore mutex = 1; // 保护count更新
Semaphore crossing = 1; // 互斥路口使用
//Semaphore pass = 1; // 保证过路人优先级
process_car() {
while(true) {
P(crossing);
机动车通过路口();
V(crossing);
}
}
process_passenger() {
while(true) {
P(mutex);
if(count == 0) {
P(crossing);
}
count++;
V(mutex);
行人通过路口();
P(mutex);
count--;
if(count == 0) {
V(crossing);
}
V(mutex);
}
}