#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;
CRITICAL_SECTION cs;
int a=0;
DWORD WINAPI ThreadFuncA(LPVOID lp)
{
while(a<100)
{
EnterCriticalSection( & cs);
cout<<"ThreadA a = "<<a<<endl;
a++;
LeaveCriticalSection( & cs);
Sleep(200);
}
return 0;
}
DWORD WINAPI ThreadFuncB(LPVOID lp)
{
while(a<100)
{
EnterCriticalSection( & cs);
cout<<"ThreadB a = "<<a<<endl;
a++;
LeaveCriticalSection( & cs);
Sleep(200);
}
return 0;
}
int main(int argc, char *argv[])
{
InitializeCriticalSection( & cs);
HANDLE Thread[2];
Thread[0]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFuncA,NULL,0,NULL);
Thread[1]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFuncB,NULL,0,NULL);
WaitForMultipleObjects(2,Thread,TRUE,100000);
DeleteCriticalSection( & cs);
CloseHandle (Thread);
system("PAUSE");
return EXIT_SUCCESS;
}