一、问题描述
东西方向汽车过独木桥,为保证安全,只要桥上无车,则允许一方的汽车过桥,待另一方的车全部过完后,另一方的车才允许过桥。
不难发现,是读者写者问题
二、问题求解
🔑:
int eastCount=0; //当前从东边上桥的汽车数量
int westCount=0; //当前从西边上桥的汽车数量
semaphore bridge=1; //两边的车互斥申请桥
semaphore eastMutex=1; //互斥访问eastCount
semaphore westMutex=1; //互斥访问westCount
East()
{
while(1)
{
P(eastMutex);
if(eastCount==0)
{
P(bridge);
}
eastCount++;
V(eastMutex);
从东边过桥;
P(eastMutex);
eastCount--;
if(eastCount==0)
{
V(bridge);
}
V(eastMutex);
}
}
West()
{
while(1)
{
P(westMutex);
if(westCount==0)
{
P(bridge);
}
westCount++;
V(eastMutex);
从西边过桥;
P(westMutex);
westCount--;
if(westCount==0)
{
V(bridge);
}
V(westMutex);
}
}
三、碎碎念
没有什么太多新鲜的,无非是第一个上桥的汽车申请bridge资源,最后一个下桥的汽车释放bridge资源,访问xCount的时候互斥访问即可。
就到这里,溜啦~