muduo Mutex详解
1. 简介
多线程环境下利用pthread进行共享资源的互斥操作,该模块使用了Thread safety annotations技术,若使用了cling c++解析器,可以在编译时进行线程安全分析,如果是其他解析器也能正常编译
2. 类与接口
MutexLock类有个私有内部类UnassignGuard用于解除监控,UnassignGuard利用线程id唯一标识tid是否空来监控,解除监控将tid置0,监控时将tid置为非空,构造时解除监控,析构时设置监控
MutexLock用于锁操作,构造时初始化mutex,析构时释放mutex;
① bool isLockedByThisThread() const
判断锁是否被当前线程所持有
② void assertLocked() const ASSERT_CAPABILITY(this)
断言当前锁被当前线程持有
③ void lock() ACQUIRE()
加锁
④ void unlock() RELEASE()
解锁
⑤ pthread_mutex_t* getPthreadMutex() /* non-const */
获取mutex
MutexLockGuard局部锁,构造时加锁,析构时解锁
3. 源码
Github
muduo Mutex详解相关推荐
- C++11 并发指南三(std::mutex 详解)
上一篇<C++11 并发指南二(std::thread 详解)>中主要讲到了 std::thread 的一些用法,并给出了两个小例子,本文将介绍 std::mutex 的用法. Mutex ...
- std::mutex详解
Mutex 又称互斥量,C++ 11中与 Mutex 相关的类(包括锁类型)和函数都声明在 <mutex> 头文件中,所以如果你需要使用 std::mutex,就必须包含 <mute ...
- 2021SC@SDUSC BRPC代码分析(七) —— bthread综述、Butex及mutex详解
2021SC@SDUSC 文章目录 一.bthread的背景知识学习 二.代码分析 总结 一.bthread的背景知识学习 经过前面6篇代码分析,我将BRPC一个极其实用的工具--bvar做了全面系统 ...
- go mutex详解
数据结构 type Mutex struct {state int32sema uint32 } state表示mutex的状态,是32位的整型变量,内部实现时把该变量分成四份,用于记录Mutex的四 ...
- muduo scoped_ptr详解
1. 简介 scoped_ptr类似于智能指针只能在作用域里使用,不希望被转让. 2. 类与接口 #ifndef _SCOPE_PTR_HH #define _SCOPE_PTR_HH // scop ...
- muduo BlockingQueue详解
1. 简介 利用条件变量和std::deque实现阻塞队列 2. 类与接口 插入数据,有2个版本 void put(const T& x) 非常量可以初始化一个底层const,反过来却不行 可 ...
- muduo StringPiece详解
1. 简介 该StringPiece是PCRE的实现,是对字符串的一个proxy类而已(即设计模式中的代理模式). 2. 背景 很多时候,当传入一个字符串到函数时,往往只是读取字符串时 若使用std: ...
- muduo Date详解
1. 简介 用于Julian Day和普通年月日的转换 2. 类与接口 2.1 class Date : public copyable ① Date::Date(int y, int m, int ...
- muduo Timestamp详解
1. 简介 Timestamp用于提供时间戳相关的工具函数. 2. 类与接口 ① string toString() const 返回时间的字符串形式,例如1649224501.687051 ② st ...
最新文章
- 一文搞定 GBDT、Xgboost 和 LightGBM 的面试
- Android 使用ViewPager 做的半吊子的图片轮播
- (转)博弈问题与SG函数
- [C++11]通过using定义基础类型和函数指针别名
- 融资2.5亿的国产浏览器,被曝只是打包chrome
- 报表移动端如何进行移动设备绑定与撤销
- SPring cloud (3)A Ribbon 负载均衡 配置初步
- 说说BXP的实际中的应用(转)
- 数字密码锁设计(利用数字逻辑电路的电子密码锁)
- 400+条实用C/C++框架、库、工具整理 ,你能想到的都在这里了
- Linux 上安装Realtek瑞昱网卡驱动
- Linux系统备份及迁移到新硬盘
- IN4007和IN4148的作用
- 企业信用代码等常用的正则验证
- 用python进行列联表卡方检验
- 高通平台sensor学习
- Java 环境变量的配置的详细教程(Windows 10)
- Ubuntu 18.04.3 双屏显示其中一个屏幕黑屏无法使用的问题 显卡驱动安装问题
- 根据GSE号在NCBI批量获取文献
- 配置 Vue 实例( 选项 )
热门文章
- 为什么要做接口测试?好处是什么?什么是接口?不同接口类型的差异是什么?
- Vue学习笔记(二)组件化和模块化
- 数据库基础操作和配置的整合集成-新手适用
- c语言isnumber函数用法,isnumber函数实例应用
- 计算机操作员评分标准,计算机操作员技能评分记录表2.doc
- 上海市浙江商会领导一行走访闪马智能,交流企业发展新趋势
- css3平移、旋转、倾斜、缩放、动画效果的实现
- 2020 年 4 月编程语言排行榜
- centos挂载U盘失败no valid journal superblock found EXT4-fs (sda): error loading journal
- mysql error 1118_mysql 5.7 建表时报错:ERROR 1118 (42000)