int iGlobe = 0;
...
void thread1Func()
{
Lock(&Mutex1);
if(iGlobe == 0) //step-1
someaction();
}
...
void thread2Func()
{
Lock(&Mutex2);
iGlobe = 5; //step-2
}
假设,
1)Thread1执行步骤1并进入休眠状态
2)同时Thread2执行步骤2并改变iGlobe的值
如何克服这种情况?
答案 0 :(得分:5)
对给定数据的所有访问都必须在同一个互斥锁上同步,否则不会产生“互斥”效果。因此,要修复代码,请将thread2Func更改为Lock(&Mutex1)
。