03CriticalSection

 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 }

 

posted @ 2017-02-01 22:56  泛未分晨  阅读(152)  评论(0编辑  收藏  举报