#include <windows.h>
#include <iostream>
using namespace std;
CRITICAL_SECTION g_cs;
bool g_bContinue = true;
int g_count1 = 0;
int g_count2 = 0;
DWORD WINAPI ThreadProc(LPVOID lpParameter);
int main()
{
HANDLE g_hTrd[2];
InitializeCriticalSection(&g_cs); //This function initializes a critical section object.
g_hTrd[0] = CreateThread(NULL,0,ThreadProc,NULL,0,NULL);
g_hTrd[1] = CreateThread(NULL,0,ThreadProc,NULL,0,NULL);
WaitForMultipleObjects(2,g_hTrd,FALSE,1000);
g_bContinue = false;
CloseHandle(g_hTrd[0]);
CloseHandle(g_hTrd[1]);
DeleteCriticalSection(&g_cs); //This function releases all resources used by an unowned critical section object.
Sleep(1);
cout << "g_count1 = " << g_count1 << "\t g_count2 = " << g_count2 << endl;
return 0;
}
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
while(g_bContinue)
{
//This function waits for ownership of the specified critical section object.
//The function returns when the calling thread is granted ownership.
EnterCriticalSection(&g_cs);
g_count1++;
g_count2++;
cout << "g_cnt1 = " << g_count1 << "\t g_cnt2 = " << g_count2 << endl;
//This function releases ownership of the specified critical section object.
LeaveCriticalSection(&g_cs);
}
return 0;
}