互斥对象有利于实现多线程中数据的线程安全。

线程调用锁函数来获得互斥对象的所有权,调用对应的解锁函数来放弃所有权。

互斥量可以是递归或非递归的,并且可以同时把所有权赋给多个线程。

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-同步-互斥量的概念相关推荐

  1. 秒杀多线程第七篇 经典线程同步 互斥量Mutex

    阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇一个经典的多线程同步问题> <秒杀多线程第五篇经典线程同步关键段CS> <秒杀多线程第六篇经典线程同步事件Event& ...

  2. c++ linux 线程等待与唤醒_Linux线程同步(互斥量、信号量、条件变量、生产消费者模型)...

    为什么要线程同步? 线程间有很多共享资源,都对一个共享数据读写操作,线程操作共享资源的先后顺序不确定,可能会造成数据的冲突 看一个例子 两个线程屏行对全局变量count++ (采用一个val值作为中间 ...

  3. 经典线程同步 互斥量Mutex的使用分析

    互斥量(mutex)内核对象用来确保一个线程独占对一个资源的访问. 互斥量对象包含一个使用计数.线程ID以及一个递归计数. 互斥量与关键段的行为完全相同.但是,互斥量是内核对象,而关键段是用户模式下的 ...

  4. 判断sem信号量为零_Linux线程同步(互斥量、信号量、条件变量、生产消费者模型)...

    为什么要线程同步? 线程间有很多共享资源,都对一个共享数据读写操作,线程操作共享资源的先后顺序不确定,可能会造成数据的冲突 看一个例子 两个线程屏行对全局变量count++ (采用一个val值作为中间 ...

  5. 线程同步 互斥量(mutex) Linux函数

    线程同步: 线程的同步需要用到互斥量(mutex)用pthread_mutex_t类型表示. 互斥量(mutex)是一种简单的加锁的方法来控制对关心资源的访问.在同一时间只有一个线程掌握某个互斥上的锁 ...

  6. 秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量

    前面<秒杀多线程第四篇一个经典的多线程同步问题>提出了一个经典的多线程同步互斥问题,这个问题包括了主线程与子线程的同步,子线程间的互斥,是一道非常经典的多线程同步互斥问题范例,后面分别用了 ...

  7. 信号量 互斥量 条件变量

    原文:https://blog.csdn.net/qq_32646795/article/details/78221005 本文打算写一些和锁有关的东西,谈一谈我对锁的原理和实现的理解,主要包含以下方 ...

  8. c++ pipe 同步 互斥_数一数Linux中有多少种线程同步策略-『Linux 源码解析(二)』...

    点这里排版好一点 本来这篇应该是上周发的,拖延症又犯了 上一篇主要讨论了Linux线程的调度算法 这篇来谈谈线程间的同步问题,暂时不包括IPC(InterProcess Communication)问 ...

  9. 秒杀多线程第十五篇 关键段,事件,互斥量,信号量的“遗弃”问题

    秒杀多线程第十五篇 关键段,事件,互斥量,信号量的"遗弃"问题 在<秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量>中对经典多线程同步互斥问题进行了回 ...

最新文章

  1. 2021-2022-1 线性代数知识点总结的视频
  2. 自由主义者的周一和周五
  3. 解决ScrollView嵌套ViewPager出现的滑动冲突问题
  4. 5天玩转mysql视频教程_六天带你玩转MySQL
  5. Codeforces Round #277 (Div. 2) A. Calculating Function 水题
  6. filterreader_Java FilterReader markSupported()方法与示例
  7. 图像入门二之视频操作
  8. SASL讲解,以及在Spark中的应用
  9. three.js mtl材质贴图未显示_C4D材质到底该怎么用?大多数设计师都没搞明白!
  10. WEB测试—兼容测试
  11. android 标题栏进度圈使用方法,Android 标题栏显示进度条
  12. 交通灯控制系统的设计
  13. linux Redis下载及安装
  14. MATLAB中有关矩阵特征值和特征向量的计算
  15. Python3新特性 类型注解 以及 点点点
  16. 信息学奥赛一本通 1247:河中跳房子 | OpenJudge NOI 1.11 10:河中跳房子 | 洛谷 P2855 [USACO06DEC]River Hopscotch S
  17. 高压开关柜无线测温系统(高压开关柜在线监测系统应用案例)
  18. 解决cannot find module providing package或cannot find main module
  19. 关于Ng-alain的Acl的使用
  20. office常用技巧总结【word篇】

热门文章

  1. 严肃贴:内幕 手机行业
  2. Visual Stdio 2017显示UTF-8字符串(中文的情况下),字符串中的字符无效
  3. MyCat分布式数据库集群架构工作笔记0016---高可用_单表存储千万级_海量存储_垂直分库划分原则
  4. 持续集成部署Jenkins工作笔记0004---Subversion环境要求
  5. SqlServe零碎要点---sqlserver如何使用日期计算,DateTime类型的格式化以及语法格式等等。
  6. EJB3.0零碎要点---在部署web本地客户端的时候org.apache.jasper.JasperException: java.lang.ClassCastException: $Proxy
  7. visual studio 2017搭建linux c++开发环境
  8. mysql8.0.20安装教程linux_Linux下安装mysql-8.0.20的教程详解
  9. python扩展c教程_使用C/C++扩展Python
  10. java测试闪退,安卓下测试运行,apk刚打开,就闪退了