关于windows下的多线程mutex问题

MokZeonSing 2016-05-25 10:32:04
本人现在在写个用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的时候,就能很好的控制方向。
...全文
725 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-05-26
  • 打赏
  • 举报
回复
《Windows核心编程》
lm_whales 2016-05-26
  • 打赏
  • 举报
回复
semaphore 有时比 mutex 好用 因为 mutex 一次只能有一个线程 可以占用资源 semaphore 可有若干个线程。同时占用资源

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧