#pragma data_seg(".inidata")
int m_iDllCount = 0;
#pragma data_seg()int GetDllRefenceCount()
{
return m_iDllCount;
}
//
// DLL 入口函数,对DLL调用次数进行统计。
//
BOOL WINAPI DllMain(
HINSTANCE hModule, 
    DWORD ul_reason_for_call, 
    LPVOID lpReserved
)
{
if(ul_reason_for_call == DLL_PROCESS_ATTACH)
{
InitializeCriticalSection(&gCriticalSection);
EnterCriticalSection(&gCriticalSection);
{
m_iDllCount ++;
}
LeaveCriticalSection(&gCriticalSection); }
else if(ul_reason_for_call == DLL_PROCESS_DETACH)
{
EnterCriticalSection(&gCriticalSection);
{
m_iDllCount -- ;
}
LeaveCriticalSection(&gCriticalSection); } return TRUE;
}
这是我从某著名源程序的一个动态库中抄的程序,这个动态库有可能被多个进程同时调用,请问以上代码能否实现对变量m_iDllCount的同步。

解决方案 »

  1.   

    不行
    用原子操作InterlockedIncrement(&InterlockedIncrement);
    InterlockedDecrement(&InterlockedIncrement);
      

  2.   

    用原子操作
    InterlockedIncrement(&m_iDllCount);
    InterlockedDecrement(&m_iDllCount);
      

  3.   

    我想是不能得,你想每次gCriticalSection都InitializeCriticalSection那都对?再说线程同步对于一个以进程而言。我想对这样情况不用也可。不用同步。每个进程调用该dll可定会自动排成队!
      

  4.   

    谢谢 Pipi0714(老顽童)
    还有其它人吗