windows系统调用 临界区机制

 1 #include "iostream"
 2 #include "windows.h"
 3 #include "cstring"
 4 using namespace std;
 5 
 6 
 7 static int g_nIndex=0;
 8 const int MAX_TIMES=10;
 9 static DWORD g_dwTimes;
10 CRITICAL_SECTION g_CriticalSection;
11 
12 DWORD WINAPI IncProc(LPVOID lpParam){
13     BOOL fDone=FALSE;
14     while(!fDone){
15         EnterCriticalSection(&g_CriticalSection);
16         if(g_nIndex>=MAX_TIMES){
17             fDone=TRUE;
18 
19         }
20         else{
21             g_dwTimes++;
22             printf("The Inc count's value is%d.\n",g_dwTimes);
23             g_nIndex++;
24             Sleep(10);
25         }
26         LeaveCriticalSection(&g_CriticalSection);
27     }
28 
29     return(0);
30 }
31 
32 DWORD WINAPI DecProc(LPVOID lpParam){
33     BOOL fDone=FALSE;
34     while(!fDone){
35         EnterCriticalSection(&g_CriticalSection);
36         if(g_nIndex>=MAX_TIMES){
37             fDone=TRUE;
38         }
39         else{
40         g_dwTimes--;
41         printf("The Dec count's value id %d.\n",g_dwTimes);
42         g_nIndex++;
43         Sleep(10);
44         }
45         LeaveCriticalSection(&g_CriticalSection);
46     }
47 
48     return(0);
49 }
50 
51 void main(){
52     HANDLE hThread[2];
53 
54     InitializeCriticalSection(&g_CriticalSection);
55 
56     hThread[0]=CreateThread(
57         NULL,
58         0,
59         IncProc,
60         reinterpret_cast<LPVOID>(2),
61         0,
62         NULL
63         );
64     printf("Thread0 is Created!\n");
65 
66     hThread[1]=CreateThread(
67         NULL,
68         0,
69         DecProc,
70         reinterpret_cast<LPVOID>(2),
71         0,
72         NULL
73         );
74     printf("Thread1 is Created!\n");
75 
76     printf("Both Threads are ready into critical section!\n");
77 
78     WaitForMultipleObjects(2,hThread,TRUE,INFINITE);
79 
80     CloseHandle(hThread[1]);
81     CloseHandle(hThread[0]);
82 
83     DeleteCriticalSection(&g_CriticalSection);
84 
85     getchar();
86 }

 

转载于:https://www.cnblogs.com/593213556wuyubao/p/3791566.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值