1千万人网站维护成本,个人网站 名称,网站建设公司考察,贵州省和城乡建设厅官方网站之前我研究了机器人开发中的 ROS2(Jazzy)系统相关内容。并将官网中比较重要的教程和概念,按照自己的学习顺序翻译成了中文,并进行了整理和记录。我在记录的过程中,还针对一些不太好理解的部分进行了额外的研究和补充说明。到目前为止,已经整理了20多篇文章。如果你想回顾…之前我研究了机器人开发中的 ROS2(Jazzy)系统相关内容。并将官网中比较重要的教程和概念,按照自己的学习顺序翻译成了中文,并进行了整理和记录。我在记录的过程中,还针对一些不太好理解的部分进行了额外的研究和补充说明。到目前为止,已经整理了20多篇文章。如果你想回顾之前的内容,可以查阅主页中 ROS2(Jazzy)相关文章。
在研究 ROS2 的过程中,我发现它使用了不少 C++11 的新特性。这让我意识到,深入掌握这些特性对于深入理解 ROS2 的实现原理和优化代码非常重要。
因此,我萌生了撰写 C++11 系列文章的想法。目前已经完成了以下几篇文章:
C++11 ROS2性能狂飙:C++11移动语义‘偷梁换柱’实战C++11 Lambda 表达式 以及 std::function和std::bindC++11 智能指针:std::unique_ptr、std::shared_ptr和std::weak_ptr而本文是第四篇,主要总结的是 C++11 的线程管理(std::thread)
C++11 的线程管理
C++11 引入了全面的多线程支持,使并发编程成为语言标准的一部分。核心组件包括线程管理(std::thread)、原子操作(std::atomic)和同步机制(互斥锁、条件变量)。
线程管理类 std::thread,用于创建和管理操作系统线程。它提供了跨平台的线程操作接口,消除了对平台特定 API(如 POSIX pthreads 或 Windows Threads)的依赖。
线程创建
我们可以通过传递可调用对象来构造 std::thread 线程实例,比如函数、Lambda、函数对象:
#include thread// 函数形式
void print(int num, const std::string str) {std::cout num " " str "\n";
}// Lambda 形式
auto lambda = [](float f) { /*...*/ };int main() {// 创建线程并立即执行std::thread t1(print, 42, "Hello"); // 值传递std::string msg = "World";std::thread t2([msg]() { // 引用捕获std::cout msg "\n";});t1.join();t2.join();
}当我们构造 std::thread 实例时,可以使用以下几种数据传递机制:
默认行为:参数按值拷贝传递引用:需使用 std::ref 包装移动语义:使用 std::move 避免拷贝void process_data(