想到一个奇怪的问题:
象下面这个代码段:
UINT WriteThread(LPVOID param)
{Section.Lock();
for(int x=0;x<10;x++)
array[x]=x;
Section.Unlock();
}
UINT ReadThread(LPVOID param)
{
Section.Lock();
For(int x=0;x<10;x++)
Destarray[x]=array[x];
Section.Unlock();
}
使用CCriticalSection 对象对共享数据互斥访问 我的问题是如果WriteThread执行到Section.Lock() 同时ReadThread也执行到Section.Lock() 着不是就同时都要访问Section对象吗? 那如何保证对Section对象的互斥访问?
第二个问题: 我自己写了一个类 类对象作为全局变量 类中有5个方法 现在想实现对类对象中数据的互斥访问 用那种互斥方法比较好 我觉得用CCriticalSection 哪位给点建议! 高分给 谢谢!

解决方案 »

  1.   

    不会同时访问。当两个线程都执行到的时候,其中某一个抢先占领CriticalSection并执行操作;另一个则等待,直到前者完成操作并且Section.Unlock返回。
      

  2.   

    第二个问题,要视具体应用而定。像上述简单的访问某个共享区域的操作,CCriticalSection就可以,简单明了。
      

  3.   

    void CheckThread(LONG lPeriod)
    {
    LARGE_INTEGER *pTime;
    LPSYSTEMTIME lpst;
    LPFILETIME lpftLocal,lpfutc;
    HANDLE hTimer=CreateWaitableTimer(NULL,false,NULL);
    GetSystemTime(lpst);
    SystemTimeToFileTime(lpst,lpftLocal);
    LocalFileTimeToFileTime(lpftLocal,lpfutc);
    pTime=(LARGE_INTEGER*)lpfutc;
    SetWaitableTimer(hTimer,pTime,lPeriod,NULL,NULL,false);
    }void TimeOut( )
    {
    WaitForSingleObject(hTimer,INFINITE)
    if(NatTable.bflag==true)
    {
    pNatItem ptr=NatTable.m_pHead ;
    NatTable.bflag =false;
    NatTable.Fresh (ptr,ptr->pLitem );
    NatTable.bflag =true;
    return;
    }
    }
    以上是我写的对一个字定义的对NatTable定时刷新的两个函数 请帮我看看逻辑上有没有什么问题 因为代码还有很多 没发一起调试现在. 谢谢 分可以加!