1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<process.h> 4 #include<windows.h> 5 6 int g_nCount1 = 0,g_nCount2 = 0; 7 bool g_bThreadProc; 8 CRITICAL_SECTION g_cs; 9 10 UINT __stdcall ThreadProc(LPVOID); 11 int main(int argc,char* argv[]) 12 { 13 HANDLE h[2]; 14 unsigned dwThreadId; 15 InitializeCriticalSection(&g_cs); 16 g_bThreadProc = true; 17 h[0] = (HANDLE)::_beginthreadex(NULL,0,ThreadProc,NULL,0,&dwThreadId); 18 h[1] = (HANDLE)::_beginthreadex(NULL,0,ThreadProc,NULL,0,&dwThreadId); 19 Sleep(1000); 20 g_bThreadProc = false; 21 ::WaitForMultipleObjects(2,h,true,INFINITE); 22 DeleteCriticalSection(&g_cs); 23 printf("g_nCount1:%d g_nCount2:%d ",g_nCount1,g_nCount2); 24 ::CloseHandle(h[0]); 25 ::CloseHandle(h[1]); 26 27 system("pause"); 28 return 0; 29 } 30 UINT _stdcall ThreadProc(LPVOID lpParam) 31 { 32 EnterCriticalSection(&g_cs); 33 while(g_bThreadProc) 34 { 35 g_nCount1 ++ ; 36 g_nCount2 ++ ; 37 } 38 LeaveCriticalSection(&g_cs); 39 return 0; 40 }