模板和多态策略化加锁

 

模版和多态策略化加锁

关键词:策略化模式 模板策略化 多态策略化 策略化加锁模式 ACE BOOST C++ 设计模式

 

在ACE和BOOST的实现中都有大量的策略化加锁(Strategized Locking)的模式,这种模式能比较方便的让你的类兼容加锁和不加锁的两种情况。ACE大师Douglas C. Schmidt有一片专门的论文Strategized Locking》对此做了介绍,国人Thzhang也对此问做过翻译《ACE策略化的加锁模式》。

本文的目的是介绍这种模式的两种实现方式模版参数和多态方式以外,同时介绍两者的优缺点。

 

模板参数(parameterized)策略化加锁

如果一个监控组件,同时要在多线程和单线程环境下使用,而且其使用的平率非常高,多线程下必须加锁,但如果因此而影响了单线程下的组件性能,是不合算的,但如果为每一种环境写一套代码显然不利于代码的重用。那么有没有方法兼容两种模式呢,这就是策略化加锁的模式。

策略化加锁的方法一般采用模版(ACE和BOOST都试用过类似方式)的方式完成中这个功能,这样带来的成本都在编译器,几乎没有什么性能影响。如下代码:

//ZEN_Null_Mutex是一种用于单线程下的策略锁,
class ZEN_Null_Mutex
{

public:

    //锁定,其实什么也没有做
    void lock()
    {
    }
    //解锁,其实什么也没有做
    void unlock()
    {
    }
}

//ZEN_Thread_Mutex是一种用于多线程下的策略锁,
class ZEN_Thread_Mutex
{
protected:
    //线程锁
    pthread_mutex_t  lock_;
public:

    //锁定, ZEN_OS是为为了跨平台封装的函数,这儿不展开,大家可以认为他就是mutex
    void lock()
    {
        ZEN_OS::pthread_mutex_lock(&lock_);
    }
    //解锁, 
    void unlock()
    {
        ZEN_OS::pthread_mutex_unlock(&lock_);
    }
}

//ZEN_Server_Statu
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值