zoukankan      html  css  js  c++  java
  • 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.
    ",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.
    ",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!
    ");
    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!
    ");
    75 
    76     printf("Both Threads are ready into critical section!
    ");
    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 }
  • 相关阅读:
    SQL Server 中WITH (NOLOCK)浅析
    C#中Monitor对象与Lock关键字的区别分析
    lock,Monitor,Mutex的区别
    如何在windows7中使用“专用字符编辑器”中的字
    ppapi,npapi
    配置OpenLDAP,Java操作LDAP,DBC-LDAP进访问
    List of Mozilla-Based Applications
    TLS协议分析
    编译Chrome详细步骤
    黑客惯用软件
  • 原文地址:https://www.cnblogs.com/593213556wuyubao/p/3791566.html
Copyright © 2011-2022 走看看