【发布时间】:2014-04-18 21:09:38
【问题描述】:
我第一次尝试使用 Mutex 实现所谓的“Mikado”游戏,但在设置了 Mutex 部分的终止标志后,我遇到了输出问题。
如果有人想仔细查看,这里是代码:
http://fpaste.org/95304/54333139/
设置终止标志后,我释放互斥体并从我的线程函数返回 0。但是其他重新定义的两个线程仍然进入 while 循环并产生错误的输出。为什么呢?我该如何改变呢?
在设置终止后,其他两个线程必须打印出他们输了比赛,但首先显示他们赢了,然后他们输了。
#0 玩家移除了 3 根木棍。
并获胜!!!
玩家 #1 移除了 0 根棍子。
并获胜!!!
玩家 #2 移除了 0 根棍子。
并获胜!!!
Drücken Sie eine beliebige 味道。 . .
如果我添加 else 部分 (!gTermination)
else if(!gTermination)
{
cout << " \n and wins!!!" << endl;
gTermination=true;
ReleaseMutex(hMutex);
return 0;
}
那么输出几乎是真的,因为其他两个线程仍然进入while循环:
玩家 #2 搞砸了他的机会... - 没有删除任何内容。
玩家 #0 移除了 3 根木棍。
并获胜!!!
玩家 #1 移除了 0 根棍子。
游戏结束 - 我,玩家 #1 输了...
玩家 #2 移除了 0 根棍子。
游戏结束 - 我,玩家 #2 输了...
Drücken Sie eine beliebige 味道。 . .
那么为什么虽然设置了终止标志,但其他两个线程仍然进入循环?
【问题讨论】:
标签: c++ windows multithreading console mutex