「本文主要介绍在编写SLAM/VIO工程时用到的C++11多线程编程的内容,包括<mutex>互斥访问、unique_lock锁管理类、condition_variable条件变量、<atomic>原子操作等内容。」
之所以把C++的内容放到SLAM系列是因为这些C++11新特性其实在C++课程中是不会涉及的,通常是在实践中需要用到时再去查去学,因此对应SLAM工程中的需要,在这里整理一下以便后面查阅复习。
未经允许,请勿转载。
笔者上一篇文章介绍了C++多线程编程的「基础概念」,以及<thread>的简单使用,链接如下:
yikang:C++笔记——多线程编程(1)zhuanlan.zhihu.com一、std::mutex 互斥访问
<mutex>是C++标准程序库中的一个头文件,定义了C++11标准中一些互斥访问的类与方法。
其中std::mutex表示普通互斥锁,可以与std::unique_lock配合使用,把std::mutex放到unique_lock中时,mutex会自动上锁,unique_lock析构时,同时把mutex解锁。因此std::mutex可以保护同时被多个线程访问的共享数据,并且它独占对象所有权,不支持对对象递归上锁。
可以这样理解:各个线程在对共享资源操作前都尝试先加锁,成功加锁才能操作,操作结束解锁。(下图来自网络)
常用的成员函数有:
-
<