boost::lock_guard可以说是一种比boost::unique_lock轻量级的lock, 简单一些场景可以用它就行了。
看看它的源代码也很简单:

[cpp] view plaincopy print?
  1. template<typename Mutex>
  2. class lock_guard
  3. {
  4. private:
  5. Mutex& m;
  6. explicit lock_guard(lock_guard&);
  7. lock_guard& operator=(lock_guard&);
  8. public:
  9. explicit lock_guard(Mutex& m_):
  10. m(m_)
  11. {
  12. m.lock();
  13. }
  14. lock_guard(Mutex& m_,adopt_lock_t):
  15. m(m_)
  16. {}
  17. ~lock_guard()
  18. {
  19. m.unlock();
  20. }
  21. };

可以看到只有两个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】boost库中thread多线程详解3——细说lock_guard相关推荐

  1. 【Boost】boost库中thread多线程详解1——thread入门与简介

    1. 概述 线程就是,在同一程序同一时间内允许执行不同函数的离散处理队列. 这使得一个长时间去进行某种特殊运算的函数在执行时不阻碍其他的函数变得十分重要. 线程实际上允许同时执行两种函数,而这两个函数 ...

  2. 【Boost】boost库中thread多线程详解9——thread_specific_ptr线程局部存储

    大多数函数都不是可重入的.这也就是说在某一个线程已经调用了一个函数时,如果你再调用同一个函数,那么这样是不安全的.一个不可重入的函数通过连续的调用来保存静态变量或者是返回一个指向静态数据的指针. 举例 ...

  3. 【Boost】boost库中thread多线程详解8——call_once仅运行一次

    还有一个问题没有解决:如何使得初始化工作(比如说构造函数)也是线程安全的.比方说,如果一个引用程序要产生唯一的全局的对象,由于实例化顺序的问题,某个函数会被调用来返回一个静态的对象,它必须保证第一次被 ...

  4. 【Boost】boost库中thread多线程详解5——谈谈线程中断

    线程不是在任意时刻都可以被中断的.如果将线程中函数中的sleep()睡眠等待去掉,那么即使在主线程中调用interrupt()线程也不会被中断.thread库预定义了若干个线程的中断点,只有当线程执行 ...

  5. 【Boost】boost库中thread多线程详解13——线程标识符

    在boost中也有唯一标识线程的数据结构:thread::id. boost::thread thread_func(func); thread::id var_id = thread_func.ge ...

  6. 【Boost】boost库中thread多线程详解12——线程的分离与非分离

    Boos::thread线程的默认属性为非分离状态,线程结束后线程标识符.线程退出状态等信息需要通过join方法回收. boost::thread thread_func(func); thread_ ...

  7. 【Boost】boost库中thread多线程详解11——线程的休眠和中断

    boost::thread 中提供一个静态方法 void boost::thread::sleep(system_time const& abs_time); 线程将休眠直到时间超时. sle ...

  8. 【Boost】boost库中thread多线程详解10——condition条件变量

    有的时候仅仅依靠锁住共享资源来使用它是不够的.有时候共享资源只有某些状态的时候才能够使用.比方说,某个线程如果要从堆栈中读取数据,那么如果栈中没有数据就必须等待数据被压栈.这种情况下的同步使用互斥体是 ...

  9. 【Boost】boost库中thread多线程详解6——线程组简单例子

    如果你需要创建几个线程,考虑使用一个线程组对象thread_group来组织它们.一个thread_group对象可以使用多种方法管理线程.首先,可以使用一个指向动态创建的线程对象的指针作为参数来调用 ...

最新文章

  1. 修改数据无法提交_学习篇管家婆物联通功能讲解--|修改客户
  2. 深入理解 Vuejs 动画效果
  3. boost::error_info的用法测试程序
  4. 《山谷物语》要怎么成为Supercell下一款年收入10亿美元的产品?
  5. 2021年第十二届蓝桥杯 - 省赛 - C/C++大学A组 - D.路径
  6. linux能远程开机么,Linux 下如何实现远程开机
  7. MMJ-Spring Boot(Java)获取小程序Openid
  8. mysql聚集索引 myisam_一句话说清聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM
  9. dalvik.system.PathClassLoader[DexPathList[[zip file /data/app/comda.xfdsafda.activdity-1/base.apk]
  10. graphics | 基础绘图系统(一)——主函数plot及其参数
  11. 区块链学习-以太坊学习简介
  12. matlab划分训练集验证和测试集代码_Matlab随机划分训练集和测试集
  13. 转子系统动力学模型matlab程序代码
  14. 《操作系统》信号量机制
  15. 海康web插件视频播放异常
  16. 【电脑操作】【鼠标】无线鼠标无反应怎么办?
  17. 芯片分享——MS9601A
  18. java 2分钟_Java怎么判断他是否在2分钟内执行了任务?
  19. linux vim操作提示:“Can't open file for writing”或“operation not permitted”的解决办法
  20. 网络云盘项目——HTTP接口介绍、功能介绍、服务端/客户端代码解析

热门文章

  1. Oracle之表分区、分区索引(二)
  2. SocketIO-nio
  3. java的虚拟机不支持在鲲鹏上_屌炸天,Oracle 发布了一个全栈虚拟机 GraalVM,支持 Python!...
  4. 电机串电阻会有什么影响?
  5. 第一章:系统困境之 再努力也不能直接打开的死结
  6. ionic3学习之总结
  7. 固特异发布人工智能球形轮胎:自动变形、自我修复、超级灵活
  8. MAC 压测工具Webbench
  9. NYOJ176 整数划分(二)
  10. 职场有多少IT精英透支健康和生命?