日期:2014-05-17  浏览次数:20705 次

windows线程调度问题
遇到这样一个问题,希望有同学帮忙解答,先谢谢了: 

当我在运行一个线程A的时候,突然线程B打断了线程A,运行了一会儿,并修改了一个全 
局变量g,这是不希望出现的。 

我怀疑是这样的:当线程A运行了一段之后,他的优先级被调度器降低了;而线程B由于 
等待了较长时间,优先级被调度器提高了。 

基于这个想法,我用函数 
BOOL SetThreadPriorityBoost(HANDLE hThread,BOOL DisablePriorityBoost);禁止调 
度器动态改变线程A和B的优先级,但是仍然会出现线程B打断A的情况。不清楚为什么会 
这样?

------解决方案--------------------
我猜可能不是优先级的问题,而是A线程运行一段时间后,由于某些条件的限制,线程被挂起,所以才导致B线程执行了。可以设置一个互斥量来判断下,只有A确实被挂起时,B才可以被执行。然后再看下结果