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\n",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 }