boost学习之boost::lock_guard源码分析
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()功能,程序結束自動析構
};
總結
以上是生活随笔為你收集整理的boost学习之boost::lock_guard源码分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: R-CNN算法优化策略
- 下一篇: mysql 8.0 一条insert语句