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)

10-06 09:40