当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

在C++中实现同步锁,近似Synchronize(object){....}[VC/C++编程]

赞助商链接



  本文“在C++中实现同步锁,近似Synchronize(object){....}[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

在做C++的项目中发现,由于用惯了c#的lock(){}和java的Synchronize(){},windows自带的临界区,互斥量,内核事件,信号量用起来不太习惯,于是打算自己在vc++中封装一个近似的东东.封装这个我决意采取一个临界区来做,终究的情势以下:

synchronize(object)

{

 //....无论此处能否发生非常,object都能被释放掉.和c#的lock一样.

}

不多说,开始代码.先定义一个Mutex类

class Mutex
{
public:
    Mutex(void);
    ~Mutex(void);
    void Lock();
    void UnLock();
private:
    CRITICAL_SECTION m_criticalSection;
};

实现以下

Mutex.cpp文件

#include "Mutex.h"

Mutex::Mutex(void)
{
    InitializeCriticalSection(&m_criticalSection);
}

Mutex::~Mutex(void)
{
    DeleteCriticalSection(&m_criticalSection);//保证对象被析构时刻可以删除临界区
}

void Mutex::Lock()
{
     EnterCriticalSection(&m_criticalSection);
}

void Mutex::UnLock()
{
    LeaveCriticalSection(&m_criticalSection);

}

在写一个Lock类来包装

头文件文件

//为了便利把头文件定义到了Mutex.h文件里面去了,改正Mutex.h如、//下:
#define synchronized(M)  for(Lock M##_lock = M; M##_lock; M##_lock.SetUnlock())//这句话背面会用到

class Mutex
{
public:
    Mutex(void);
    ~Mutex(void);
    void Lock();
    void UnLock();
private:
    CRITICAL_SECTION m_criticalSection;
};

class Lock
{
public:
    Lock(Mutex &mutex);
    ~Lock(void);
    void SetUnlock();
    operator bool () const;
private:
    Mutex &m_mutex;
    bool m_locked;
};

Lock类的实现:Lock.cpp文件

#include "Mutex.h"

Lock::Lock(Mutex &mutex): m_mutex(mutex), m_locked(true)
{
    m_mutex.Lock();
}

Lock::~Lock(void)
{/*一定要在析构函数中解锁,因为不管发生什么,只要对象脱离他的生命周期(即脱离大括号),城市调用其析构函数*/
     m_mutex.UnLock();
}

void Lock::SetUnlock()
{
     m_locked = false;
}

Lock::operator bool() const
{
    return m_locked;


}


  以上是“在C++中实现同步锁,近似Synchronize(object){....}[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 高配置机械在CC攻击需求做的调整
  • Windows7与XP 双系统同时安装在C盘的办法
  • 在Centos 5.2上安装Xen并成立windows 2003虚拟机
  • 在CentOS 上编译安装Memcached
  • 在CentOS 6.0安装LAMP服务器(Apache2+PHP5+MySQL)
  • 若何让QVOD播放器不在C盘建media文件而在E盘建呢~
  • <b>在CentOS下通过源码 编译安装Xen 4.1.1</b>
  • <b>在CentOS 6.0 上安装LAMP服务器( Apache2 + PHP5 + MySQL)</b>
  • 如安在CentOS安装ispCP虚拟主机掌握面板
  • <b>如安在CentOS 5.5上安装Kippo蜜罐</b>
  • 在CentOS下安装webmin的具体流程
  • <b>在CentOS下安装webmin流程</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .