void InitializeCriticalSection( LPCRITICAL_SECTION lpCriticalSection );
void DeleteCriticalSection( LPCRITICAL_SECTION lpCriticalSection );
void EnterCriticalSection( LPCRITICAL_SECTION lpCriticalSection );
void LeaveCriticalSection( LPCRITICAL_SECTION lpCriticalSection );
CRITICAL_SECTION Section;
long nFirst = 0,nSecond = 0;
BOOL bFlag = FALSE;
DWORD WINAPI ThreadFun(LPVOID lpParam)
{
EnterCriticalSection(&Section);
while(bFlag)
{
nFirst ++;
nSecond ++;
}
LeaveCriticalSection(&Section);
return 0;
}
int main()
{
HANDLE hThread[2] = {0};
bFlag = TRUE;
InitializeCriticalSection(&Section);
hThread[0] = CreateThread(NULL,NULL,ThreadFun,NULL,NULL,NULL);
hThread[1] = CreateThread(NULL,NULL,ThreadFun,NULL,NULL,NULL);
Sleep(2000);
bFlag = FALSE;
WaitForMultipleObjects(2, hThread, TRUE, INFINITE);
cout<<"F=="<<nFirst<<endl;
cout<<"S=="<<nSecond<<endl;
CloseHandle(hThread[0]);
CloseHandle(hThread[1]);
DeleteCriticalSection(&Section);
return 0;
}