为什么不能线程调用类的成员函数_SLAM从0到1——13.SLAM中的多线程编程(2)

e9fbd8b379e85c6d3fb35bc7399210c7.png

「本文主要介绍在编写SLAM/VIO工程时用到的C++11多线程编程的内容,包括<mutex>互斥访问、unique_lock锁管理类、condition_variable条件变量、<atomic>原子操作等内容。」

之所以把C++的内容放到SLAM系列是因为这些C++11新特性其实在C++课程中是不会涉及的,通常是在实践中需要用到时再去查去学,因此对应SLAM工程中的需要,在这里整理一下以便后面查阅复习。

未经允许,请勿转载。

笔者上一篇文章介绍了C++多线程编程的「基础概念」,以及<thread>的简单使用,链接如下:

yikang:C++笔记——多线程编程(1)​zhuanlan.zhihu.com
36256162382b0ab3e18e8c5016a63a0b.png

一、std::mutex 互斥访问

<mutex>是C++标准程序库中的一个头文件,定义了C++11标准中一些互斥访问的类与方法。

其中std::mutex表示普通互斥锁,可以与std::unique_lock配合使用,把std::mutex放到unique_lock中时,mutex会自动上锁,unique_lock析构时,同时把mutex解锁。因此std::mutex可以保护同时被多个线程访问的共享数据,并且它独占对象所有权,不支持对对象递归上锁。

可以这样理解:各个线程在对共享资源操作前都尝试先加锁,成功加锁才能操作,操作结束解锁。(下图来自网络)

756756beb52d3f8aecbf5edf6a2c8114.png

常用的成员函数有:

    <
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值