zoukankan      html  css  js  c++  java
  • windows系统调用 互斥体mutex

     1 #include "iostream"
     2 #include "windows.h"
     3 using namespace std;
     4 
     5 class CCountUpDown{
     6 public:
     7     CCountUpDown(int nAccesses):
     8     m_hThreadInc(INVALID_HANDLE_VALUE),
     9         m_hThreadDec(INVALID_HANDLE_VALUE),
    10         m_hMutexValue(INVALID_HANDLE_VALUE),
    11         m_nValue(0),
    12         m_nAccess(nAccesses){
    13         m_hMutexValue=CreateMutex(
    14             NULL,
    15             TRUE,
    16             NULL
    17             );
    18         m_hThreadInc=CreateThread(
    19             NULL,
    20             0,
    21             IncThreadProc,
    22             reinterpret_cast<LPVOID>(this),
    23             0,
    24             NULL
    25             );
    26         m_hThreadDec=CreateThread(
    27             NULL,
    28             0,
    29             DecThreadProc,
    30             reinterpret_cast<LPVOID>(this),
    31             0,
    32             NULL
    33             );
    34         ReleaseMutex(m_hMutexValue);
    35     }
    36 
    37     virtual ~CCountUpDown(){
    38         CloseHandle(m_hThreadInc);
    39         CloseHandle(m_hThreadDec);
    40         CloseHandle(m_hMutexValue);
    41     }
    42 
    43     virtual void WaitForCompletion(){
    44         if(m_hThreadInc!=INVALID_HANDLE_VALUE&&m_hThreadDec!=INVALID_HANDLE_VALUE){
    45             WaitForSingleObject(m_hThreadInc,INFINITE);
    46             WaitForSingleObject(m_hThreadDec,INFINITE);
    47         }
    48     }
    49 
    50 protected:
    51     virtual void DoCount(int nStep){
    52         while(m_nAccess>0){
    53             WaitForSingleObject(m_hMutexValue,INFINITE);
    54 
    55             m_nValue+=nStep;
    56             printf("thread:%d valuem,value:%d access:%d
    ",GetCurrentThreadId(),m_nValue,m_nAccess);
    57             --m_nAccess;
    58             Sleep(500);
    59 
    60             ReleaseMutex(m_hMutexValue);
    61         }
    62     }
    63 
    64     static DWORD WINAPI IncThreadProc(LPVOID lpParam){
    65         CCountUpDown *pThis=reinterpret_cast<CCountUpDown*>(lpParam);
    66         pThis->DoCount(+1);
    67         return (0);
    68     }
    69 
    70     static DWORD WINAPI DecThreadProc(LPVOID lpParam){
    71         CCountUpDown*pThis=reinterpret_cast<CCountUpDown*>(lpParam);
    72         pThis->DoCount(-1);
    73         return(0);
    74     }
    75 
    76 protected:
    77     HANDLE m_hThreadInc;
    78     HANDLE m_hThreadDec;
    79     HANDLE m_hMutexValue;
    80     int m_nValue;
    81     int m_nAccess;
    82 };
    83 
    84 void main(){
    85     CCountUpDown ud(10);
    86     ud.WaitForCompletion();
    87     getchar();
    88 }
  • 相关阅读:
    C#图片无损压缩
    as3.0 动态文本属性大全
    卡​马​克​卷​轴​算​法​研​究​_​地​图​双​缓​冲
    春卷活动心得
    移动端videojs视频插件使用直播流rtmp、hls、http-flv的注意事项
    在Windows2008系统中利用IIS建立FTP服务器
    winform 窗体自适应 根据新窗体大小按比例放缩
    HTTPS抓包
    数据库 事物 锁
    sql 事物 锁 快照(转发的,写的非常好)
  • 原文地址:https://www.cnblogs.com/593213556wuyubao/p/3789074.html
Copyright © 2011-2022 走看看