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