举例:程序是这样。
int i=0;void a()
{
  i++;
}void b()
{
  i--;
}怎么在执行a的时候不让b执行,有什么好的办法。我想的方式是用一个bool变量来做。
int i=0;
BOOL do=FALSE;void a()
{
  while do{
    sleep(10);
  }
  do=TRUE;
  i++;
  do=FALSE;
}void b()
{
  while do{
    sleep(10);
  }
  do=TRUE;
  i--;
  do=FALSE;
}
/////////////////////////////////////////
可是我听说好像有一种关键区技术是专门来解决这种问题的.谁来讲解一下;最后,忽然想到一个问题,如果是进程之间,怎么来确保同步问题.:)谢谢了!

解决方案 »

  1.   

    同步!
    参考:
    http://www.vckbase.net/document/viewdoc/?id=758
      

  2.   

    CSingleLock
    CMultiLock
    这几个类都行。
    好象还有一种内核方式的加一操作,叫什么想不起来了。。
      

  3.   

    //////////////////我查了关键区的资料/////不知道能不能行哈,我贴出来
    int i=0;
    CRITICAL_SECTION cr;程序开始
    {
     InitializeCriticalSection(&cr);
    }void a()
    {
      EnterCriticalSection(&cr);//自动等待并获得权限
      i++;
      LeaveCriticalSection(&cr);//离开操作权限
    }void b()
    {
      EnterCriticalSection(&cr);
      i--;
      LeaveCriticalSection(&cr);
    }程序结束
    {
      DeleteCriticalSection(&cr);
    }
      

  4.   

    临界区CriticalSection
    互斥Mutex
    事件Event
    都可以
      

  5.   

    Jeffrey Richter大牛推荐用互锁函数家簇里的:
    InterlockedExchangeAdd(&i,1);
    来代替你的i++就行了。
    这个函数是用原子操作方式对i进行增加.
    而且是“用户方式”的线程同步方式。
    比起“内核方式”的线程同步技术来高效得多。
      

  6.   

    用mutex
    mutex.lock
    i++
    mutex.unlockmutex.lock
    i++
    mutex.unlock
      

  7.   

    将用到的flag定义为关键资源,用mutex或者是临界段先取得再访问~~~~~