Criticalsection and CreateThread example (EnterCriticalSection LeaveCriticalSection)
#include <windows.h> #include <string> #include <iostream> #include <process.h> /* _beginthread, _endthread */ long a=0; long b=0; int Threadcount=64; int s=Threadcount; CRITICAL_SECTION gcs; void Submain(void *x) { for (int L=0;L<1000;L++) { a=a++; EnterCriticalSection(&gcs); b=b++; LeaveCriticalSection(&gcs); } /* s=s-1; //Simple synchronization technique. May be useful if you like to increase the thread count WaitForMultipleObjects support value defined for MAXIMUM_WAIT_OBJECTS 64 if(s==0) { d=TRUE; } */ _endthread(); } void main() { HANDLE *hThreads; hThreads = new HANDLE[Threadcount] ; InitializeCriticalSection(&gcs); for (int i=0;i<Threadcount;i++) { hThreads[i]= CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE )Submain, NULL, 0, NULL); if (hThreads[i]==NULL) { printf("\nThread creation failed for thread %d with error %d",i,GetLastError()); } } DWORD rw=WaitForMultipleObjects(Threadcount,hThreads,true,INFINITE); DeleteCriticalSection(&gcs); //while(!d); //Simple synchronization technique printf("Value of a is:%d\n" ,a); printf("Value of b is:%d\n" ,b); system("pause"); }