阅读ISE 复习linux多线程开发时需使用的锁

1、缘由

以项目带动学习,主要学习C++一些特性,复习linux编程中锁、信号、条件变量等。

2、ISE点示例

///
// class AutoInvokable/AutoInvoker - 自动被调对象/自动调用者
//
// 说明:
// 1. 这两个类联合使用,可以起到和 "智能指针" 类似的作用,即利用栈对象自动销毁的特性,在栈
//    对象的生命周期中自动调用 AutoInvokable::invokeInitialize() 和 invokeFinalize()。
//    此二类一般使用在重要资源的对称性操作场合(比如加锁/解锁)。
// 2. 使用者需继承 AutoInvokable 类,重写 invokeInitialize() 和 invokeFinalize()
//    函数。并在需要调用的地方定义 AutoInvoker 的栈对象。

class AutoInvokable
{
public:
    friend class AutoInvoker;
    virtual ~AutoInvokable() {}
protected:
    virtual void invokeInitialize() {}
    virtual void invokeFinalize() {}
};

class AutoInvoker : boost::noncopyable
{
public:
    explicit AutoInvoker(AutoInvokable& object)
        { object_ = &object; object_->invokeInitialize(); }

    explicit AutoInvoker(AutoInvokable *object)
        { object_ = object; if (object_) object_->invokeInitialize(); }

    virtual ~AutoInvoker()
        { if (object_) object_->invokeFinalize(); }

private:
    AutoInvokable *object_;
};

///
// class AutoLocker - 线程自动互斥类
//
// 说明:
// 1. 此类利用C++的栈对象自动销毁的特性,在多线程环境下进行局部范围临界区互斥;
// 2. 使用方法: 在需要互斥的范围中以局部变量方式定义此类对象即可;
//
// 使用范例:
//   假设已定义: Mutex mutex_;
//   自动加锁和解锁:
//   {
//       AutoLocker locker(mutex_);
//       //...
//   }

typedef AutoInvoker AutoLocker;

///
// class BaseMutex - 互斥器基类

class BaseMutex:
    public AutoInvokable,
    boost::noncopyable
{
public:
    virtual void lock() = 0;
    virtual void unlock() = 0;
protected:
    virtual void invokeInitialize() { lock(); }
    virtual void invokeFinalize() { unlock(); }
};

///
// class Mutex - 线程互斥类
//
// 说明:
// 1. 此类用于多线程环境下临界区互斥,基本操作有 lock、unlock;
// 2. 线程内允许嵌套调用 lock,嵌套调用后必须调用相同次数的 unlock 才可解锁;

class Mutex : public BaseMutex
{
public:
    Mutex();
    virtual ~Mutex();

    virtual void lock();
    virtual void unlock();

private:
    pthread_mutex_t mutex_;
    friend class Condition;
};

3、可以借鉴的技术点

a.利用函数栈的特性,类的生命周期只在函数作用域内,进入函数时压栈调用构造函数上锁,离开函数时栈空间自动回收

调用析构函数解锁,方便成对使用锁,防止遗忘。

b.继承、友元类、抽象类等的实践。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值