boost-同步-互斥量的概念
互斥对象有利于实现多线程中数据的线程安全。
线程调用锁函数来获得互斥对象的所有权,调用对应的解锁函数来放弃所有权。
互斥量可以是递归或非递归的,并且可以同时把所有权赋给多个线程。
Boost.Thread提供独占的递归、非递归互斥量,以及共享(多读单一写)互斥量。
BasicLockable概念
BasicLockable是独占模型。
满足这个模型的对象需要实现两个接口
- m.lock()
- m.unlock()
调用lock()来获取锁的所有权,同时必须调用unlock()来释放所有权。
当前线程调用lock()时,会阻塞,直到获得锁的所有权。
Lockabe概念
一个类型要满足Lockable要求,它需要满足BasicLockable,同时满足1个接口
- m.try_lock()
try_lock()获取的锁的所有权,必须通过unlock()来释放
当前线程调用try_lock()来尝试获得锁的所有权,并不会阻塞,如果获得所有锁,try_lock()会返回true。
Recursive Lockable概念
没有接口要求,只有3个特性
用户可以要求传入算法的互斥量是递归的。
无法通过模板的元编程来检查一个lockable是否可递归,因此才引入3个特性
TimedLockable概念
一个类型要满足TimedLockable要求,它需要满足Lockable,同时满足4个接口
- m.try_lock_until(abs_time)
- m.try_lock_for(rel_time)
- m.timed_lock(abs_time)
- m.timed_lock(rel_time)
线程将被阻塞,直到获得所有权或指定的时间结束。如果时间结束还未获得所有权,那么按try_lock()处理。
如果获得所有权,会返回true。
SharedLockable概念
一个类型要满足SharedLockable要求,它需要满足TimedLockable,同时满足6个接口
- m.lock_shared()
- m.try_lock_shared()
- m.try_lock_shared_for(rel_time)
- m.try_lock_shared_until(abs_time)
- m.unlock_shared()
- m.timed_lock_shared(abs_time)
共享锁必须调用unlock_shared()来释放
转载于:https://www.cnblogs.com/sqxy110/p/5249680.html
boost-同步-互斥量的概念相关推荐
- 秒杀多线程第七篇 经典线程同步 互斥量Mutex
阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇一个经典的多线程同步问题> <秒杀多线程第五篇经典线程同步关键段CS> <秒杀多线程第六篇经典线程同步事件Event& ...
- c++ linux 线程等待与唤醒_Linux线程同步(互斥量、信号量、条件变量、生产消费者模型)...
为什么要线程同步? 线程间有很多共享资源,都对一个共享数据读写操作,线程操作共享资源的先后顺序不确定,可能会造成数据的冲突 看一个例子 两个线程屏行对全局变量count++ (采用一个val值作为中间 ...
- 经典线程同步 互斥量Mutex的使用分析
互斥量(mutex)内核对象用来确保一个线程独占对一个资源的访问. 互斥量对象包含一个使用计数.线程ID以及一个递归计数. 互斥量与关键段的行为完全相同.但是,互斥量是内核对象,而关键段是用户模式下的 ...
- 判断sem信号量为零_Linux线程同步(互斥量、信号量、条件变量、生产消费者模型)...
为什么要线程同步? 线程间有很多共享资源,都对一个共享数据读写操作,线程操作共享资源的先后顺序不确定,可能会造成数据的冲突 看一个例子 两个线程屏行对全局变量count++ (采用一个val值作为中间 ...
- 线程同步 互斥量(mutex) Linux函数
线程同步: 线程的同步需要用到互斥量(mutex)用pthread_mutex_t类型表示. 互斥量(mutex)是一种简单的加锁的方法来控制对关心资源的访问.在同一时间只有一个线程掌握某个互斥上的锁 ...
- 秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量
前面<秒杀多线程第四篇一个经典的多线程同步问题>提出了一个经典的多线程同步互斥问题,这个问题包括了主线程与子线程的同步,子线程间的互斥,是一道非常经典的多线程同步互斥问题范例,后面分别用了 ...
- 信号量 互斥量 条件变量
原文:https://blog.csdn.net/qq_32646795/article/details/78221005 本文打算写一些和锁有关的东西,谈一谈我对锁的原理和实现的理解,主要包含以下方 ...
- c++ pipe 同步 互斥_数一数Linux中有多少种线程同步策略-『Linux 源码解析(二)』...
点这里排版好一点 本来这篇应该是上周发的,拖延症又犯了 上一篇主要讨论了Linux线程的调度算法 这篇来谈谈线程间的同步问题,暂时不包括IPC(InterProcess Communication)问 ...
- 秒杀多线程第十五篇 关键段,事件,互斥量,信号量的“遗弃”问题
秒杀多线程第十五篇 关键段,事件,互斥量,信号量的"遗弃"问题 在<秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量>中对经典多线程同步互斥问题进行了回 ...
最新文章
- 2021-2022-1 线性代数知识点总结的视频
- 自由主义者的周一和周五
- 解决ScrollView嵌套ViewPager出现的滑动冲突问题
- 5天玩转mysql视频教程_六天带你玩转MySQL
- Codeforces Round #277 (Div. 2) A. Calculating Function 水题
- filterreader_Java FilterReader markSupported()方法与示例
- 图像入门二之视频操作
- SASL讲解,以及在Spark中的应用
- three.js mtl材质贴图未显示_C4D材质到底该怎么用?大多数设计师都没搞明白!
- WEB测试—兼容测试
- android 标题栏进度圈使用方法,Android 标题栏显示进度条
- 交通灯控制系统的设计
- linux Redis下载及安装
- MATLAB中有关矩阵特征值和特征向量的计算
- Python3新特性 类型注解 以及 点点点
- 信息学奥赛一本通 1247:河中跳房子 | OpenJudge NOI 1.11 10:河中跳房子 | 洛谷 P2855 [USACO06DEC]River Hopscotch S
- 高压开关柜无线测温系统(高压开关柜在线监测系统应用案例)
- 解决cannot find module providing package或cannot find main module
- 关于Ng-alain的Acl的使用
- office常用技巧总结【word篇】
热门文章
- 严肃贴:内幕 手机行业
- Visual Stdio 2017显示UTF-8字符串(中文的情况下),字符串中的字符无效
- MyCat分布式数据库集群架构工作笔记0016---高可用_单表存储千万级_海量存储_垂直分库划分原则
- 持续集成部署Jenkins工作笔记0004---Subversion环境要求
- SqlServe零碎要点---sqlserver如何使用日期计算,DateTime类型的格式化以及语法格式等等。
- EJB3.0零碎要点---在部署web本地客户端的时候org.apache.jasper.JasperException: java.lang.ClassCastException: $Proxy
- visual studio 2017搭建linux c++开发环境
- mysql8.0.20安装教程linux_Linux下安装mysql-8.0.20的教程详解
- python扩展c教程_使用C/C++扩展Python
- java测试闪退,安卓下测试运行,apk刚打开,就闪退了