#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的同步。
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的同步。
用原子操作InterlockedIncrement(&InterlockedIncrement);
InterlockedDecrement(&InterlockedIncrement);
InterlockedIncrement(&m_iDllCount);
InterlockedDecrement(&m_iDllCount);
还有其它人吗