具有多个线程和互斥锁的竞争条件

时间:2014-04-23 07:12:48

标签: c++ multithreading

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的值

如何克服这种情况?

1 个答案:

答案 0 :(得分:5)

对给定数据的所有访问都必须在同一个互斥锁上同步,否则不会产生“互斥”效果。因此,要修复代码,请将thread2Func更改为Lock(&Mutex1)