【发布时间】:2010-05-04 00:17:01
【问题描述】:
我有一个有多个线程的程序,一个线程在退出时会改变一个全局,另一个线程会反复轮询全局。对全局变量没有任何保护。 该程序在单处理器上运行良好。在双核机器上,它会工作一段时间,然后在 Sleep(0) 或 SuspendThread() 上停止。有人能帮我解决这个问题吗?
代码是这样的:
Thread 1:
do something...
while(1)
{
.....
flag_thread1_running=false;
SuspendThread(GetCurrentThread());
continue;
}
Thread 2
flag_thread1_running=true;
ResumeThread(thread1);
.....do some other work here....
while(flag_thread1_running) Sleep(0);
....
【问题讨论】:
-
除非您是调试器,否则切勿使用 SuspendThread。相反,使用适当的同步对象(事件、互斥体、信号量等)来控制正在运行的线程。
-
嗨拉森,这有什么原因吗?如果您能给我一些提示,将不胜感激
-
这没有任何意义。标志在哪里设置为
true?为什么while循环的末尾有一个裸露的continue;?如果您生成一个演示问题的最小可编译程序,那么您可能会得到更好的帮助。 -
线程 2 是这样的:flag_thread1_running=true;恢复线程(线程 1); .....在这里做一些其他的工作...... while(flag_thread1_running) Sleep(0); continue 语句让线程在恢复后从 while(1) 开始
-
您能改写一下这个问题吗?我不确定您要做什么。
标签: c++ c multithreading winapi