关于windows下的多线程mutex问题
本人现在在写个用mutex来控制线程并发的过桥问题。
题目:假设有一座东西向的车辆单行道路的桥,每次允许同方向的若干车辆通过(即桥上可 以有多个同方向的车辆通过)。在桥上没有车辆时,任何一端的车辆都允许上桥通过, 当有车辆上桥后,同端的车辆可以继续上桥,但另一端的车辆不能上桥。请用 P、V 操作来实现东西两端人过桥的问题。
我的实现的办法是:
mutex=1; 控制桥的方向
Neast=0; Emutex=1;//抢到mutex,允许同一方向的车进桥,直到最后一辆离开。(下同)
Nwest=0; Emutex=1;
E->W://从东向西
P(Emutex)
Neast+=1; //Neast是东方向来的车的数量
if(Neast==1)
p(mutex) //抢夺桥的方向
V(emutex)
cross brige
p(emutex)
cNeast_=1;
if(Neast==0)
v(mutex)//唤醒另一方向
V(emutex)
现在发现了一个问,当我定义了三个mutex的时候,只有两个分别控制各自上车mutex齐了作用,然而那个控制桥的方向的mutex却又了问题 ,就是没有返回作用。但是当我用semaphore的时候,就能很好的控制方向。