boost学习之boost::lock_guard源码分析

21 篇文章 0 订阅
5 篇文章 0 订阅

boost::lock_guard可以说是一种比boost::unique_lock轻量级的lock, 简单一些场景可以用它就行了。源码如下:

template<typename Mutex>

class lock_guard

{

private:

    Mutex& m;

 

    explicit lock_guard(lock_guard&);

    lock_guard& operator=(lock_guard&);

public:

    explicit lock_guard(Mutex& m_) : m(m_) {

        m.lock();

    }

    lock_guard(Mutex& m_,adopt_lock_t) : m(m_)

    {}

    ~lock_guard() {

        m.unlock();

    }

}

可以看到只有两个public方法,即构造和析构函数,也就是说,使用boost::lock_guard去guard一个mutex,必然是在boost::lock_guard的对象离开其作用域时unlock它所guard的mutex,不提供提前unlock的功能。

而boost::unique_lock则提供这个功能,除了像boost::lock_guard一样在离开作用域时unlock它guard的mutex外,boost::unique还提供unlock函数,使用者可以手动执行unlock。此外,unique_lock还可以设置超时。

例子如下:

boost::mutex mutex;

void foo( )

{

    boost::lock_guard<boost::mutex> lock(mutex);

    process(data);

///没有unlock()功能,程序结束自动析构

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值