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源码分析相关推荐
- 深度学习库 caffe使用 源码分析 依赖库分析 caffe glog gflags openBlas prototxt yolo_darknet 转 caffe
深度学习库 caffe使用 源码分析 依赖库分析 caffe glog gflags openBlas 本文github链接 yolo_darknet 转 caffe caffe 安装 Caffe代码 ...
- golang学习之negroni/gizp源码分析
在 Go 语言里,Negroni 是一个很地道的 Web 中间件,它是一个具备微型.非嵌入式.鼓励使用原生 net/http 库特征的中间件.利用它地Use功能,我们可以很简单地自定义中间件并使用.其 ...
- 了不起的 Webpack HMR 学习指南(含源码分析)
学习时间:2020.06.14 学习章节:<Webpack HMR 原理解析> 一.HMR 介绍 Hot Module Replacement(以下简称:HMR 模块热替换)是 Webpa ...
- FFmpeg 源码学习(一):avformat_open_input 源码分析
一.源码方法参数分析 下面是avformat_open_input的方法及参数: /** * Open an input stream and read the header. The codecs ...
- Combres库 学习小结以及部分源码分析
昨天看到有博客园网友发布了一篇关于<使用Combres 库 ASP.NET 网站优化>的文章,觉得是个挺不错的脚本优化的类库,而且目前我的项目公务员考试应战平台也有使用到Js以及css合并 ...
- Netty学习笔记 - 1 (带源码分析部分)
2021年12月 北京 xxd 一.Netty是什么 Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github 上的独立项目. Netty 是一个异步的.基于事件驱动的网络应用 ...
- STL学习(自学手册+源码分析)之RB -tree
1.1 RB-tree 1.1.1 RB-tree主体部分 template <class Key, class Value, class KeyOfValue, class Compare,c ...
- EventBus源码分析
简介 前面我学习了如何使用EventBus,还有了解了EventBus的特性,那么接下来我们一起来学习EventBus的源码,查看EventBus的源码,看看EventBus给我们带来什么惊喜以及编程 ...
- RuoYi-Vue-Plus 与 RuoYi-Cloud-Plus 高端进阶 源码分析 系列教程
专栏地址 由项目成员 MichelleChung 书写 vue版本专栏 https://blog.csdn.net/michelle_zhong/category_11109741.html Clou ...
最新文章
- IntelliJ IDEA(2017)安装和破解
- 【数据平台】Eclipse+MapReduce开发环境(集群运行模式)
- Linux带给了我什么?
- 传奇服务端各文件用途说明
- python fromarray_python --- 之pil image.fromarray
- vive手柄按键开发说明
- C语言蓝桥杯刷题:等差素数列
- 微信小程序往数组中添加元素对象
- SwiftUI内功之如何设计Struct和Class不要和陌生人说话
- Eureka自我保护机制原理及作用enable-self-preservation
- 被讨厌的勇气:共同体感觉
- 随笔—醒悟篇之考研调剂
- Java8 lambda表达式详解
- NFT+DeFi =NFTFI
- gradle打包并将源码上传到私服
- 云服务器修改dns 114,为什么改成114dns就行?
- GICv3软件overview手册之虚拟化
- MySQL数据库鼠标操作
- 黑魔法:iOS链式编程
- 计算机在英语教学,论计算机在英语教学中的辅助作用原稿(电子版)